- Mar 02 Mon 2009 00:00
-
關於 天文達人(Young Astronomy Pro, YAP)
- Oct 20 Thu 2011 23:37
-
畫星星
撰寫者:謝翔宇
----------------------------------------------------------------------------------------------------
pro
test
----------------------------------------------------------------------------------------------------
pro
test
- Oct 12 Wed 2011 01:51
-
自動OC赫羅圖、雙色圖程式
撰寫者:謝翔宇
備註:近來完整度(不是完成度)最高的程式。
這份程式的概念很簡單,但也沒想到會寫成這麼長的程式碼(273行)…
學長說還可以再精簡,而且還有一些小問題。
不過我目前不想再改動它了(論文code不能再拖了…)
初始條件1,用免費軟體AstroArt讀出來的星表,把三色影像都讀出。
初始條件2,用眼睛對好星表幾號和幾號的星是同一顆,然後把號碼寫成一個txt檔。(這步驟應該可以自動化,但我目前還沒有概念)
有以上兩個條件,我先把參考星迴歸,得到三幅影像平移旋轉的參數,
然後把三份星表改成同座標系統,位置相同(小於某畫素)就當作同一顆星,
製作新的星表,附上三色星等,繪製星圖、赫羅圖、雙色圖等。
不過我至今仍無法解決把星圖的星星依RGB比例上色的問題…
我以為很簡單,但我不會用IDL寫。
以下就是程式碼了,智慧財產權聲明同本BLOG (http://evaof31734.blogspot.com/2011/10/idl-oc.html#more)。
----------------------------------------------------------------------------------------------------
;This
is a program try to read an initial data from AstroArt4.0 .sta
file.
- Jul 08 Fri 2011 12:46
-
將檔案轉為矩陣並畫圖
撰寫者:吳育倫
----------------------------------------------------------------------------------------------------
; 這程式用來從檔案讀檔, 轉成矩陣, 並畫圖, 使用ps格式輸出
pro IDLtest
openr,1,'G:\IDLtest\0000.txt' ;讀檔案, 定義成 1 這代號, 後面是路徑
xx=' ' ;
設定xx是空格,在' '之間是被定義的字
aa=0. ; 定義aa是有小數點的數字
bb=0.
aaa=fltarr(3)
;定義aaa是矩陣, 矩陣有2欄
bbb=fltarr(3)
readf,1,xx ; 讀檔,
把檔案的第一欄標題用空格跳過
i=0 ;定義i是0, 作為矩陣開始的欄位
while not eof(1) do begin ; 讀檔,
當檔案 1 讀完前都執行到endwhile之前的這段的動作
readf,1,format='(7x, f6.3, x, f6.3)', aa, bb ;
讀檔案, 格式x是空格, f是小數點, 把讀的第一列值視為aa, 第二列視為bb
aaa(i)=aa ;把aa轉換成矩陣
aaa
bbb(i)=bb
i=i+1 ; 使矩陣項目加到下一個
endwhile
; 把矩陣拿來畫圖,
畫圖一定是要矩陣格式
set_plot,'ps'
device,filename='G:\IDLtest\0000.ps'
;上面兩行是將要畫的圖用device輸出, 輸出成.ps的檔案(可用ghost
script開)
plot, aaa,bbb, $
linestyle=0, psym=1 , xrange=[-20,30],
yrange=[-10, 60] ,/xstyle, /ystyle, /isotropic
; 上面兩行在畫圖, 把矩陣aaa視為圖的x軸,
矩陣bbb視為圖的y軸,符號 $ 表示連結兩行用的連接符號
; linestyle表要畫的線的格式, psym表點的形狀, 後面的數字是IDL內的代碼,
可由help中的索引查找出
; xrange表要顯示的X軸範圍,在[]中的數字表顯示的最小,最大範圍, yrange表y軸
;
/xstyle表要將x軸的實際顯示範圍與使用xrange設定的範圍完全相符,
/ystyle表y軸
; /isotropic表將顯示的X軸與Y軸顯示比例調整成完全相同的
;print,aaa, bbb
device, /close
;將之前設定的device關閉
print, 'ok' ;只是在最後print一個ok來表示程式跑完了
close,/all
;關閉全部之前打開的檔案, 也可以只關閉指定代號的檔案, 例如close,1表把1這個檔案關閉
end ; 結束這個程式,
放棄這個回合
- Jul 08 Fri 2011 12:29
-
舊資料寫入新檔案
撰寫者:謝翔宇
----------------------------------------------------------------------------------------------------
pro oldwritenew
;將舊資料寫入新檔案,並加入標題和一項新資料。而該筆新資料是以陣列型式寫成的。
close,/all
in=0
openr, 1,
'D:\IDL method\NGC6633.prn' ;開啟星表原始檔,該檔案沒有標題列
while not (eof(1)) do begin
;開始讀檔案直到結尾
readf, 1, format='(5x,i3,3x,f5.1,3x,f5.1,3x,f5.1,3x,f5.2,3x,f5.2)',No0,M0,X0,Y0,mux0,muy0
in=in+1
;計數星表中有幾筆資料。有讀到一行計數器就+1
endwhile
print,' number of stars =' ,in
;給我看到底有幾顆!
close,/all
openr, 1, 'D:\IDL method\NGC6633.prn'
;再次開啟星表原始檔
openw, 3, 'D:\IDL method\NGC6633pc.txt' ;創建新檔案,供星表資料輸入
printf,
3, ' No M X Y mux muy Pc' ;將新檔案寫入標題
pc=fltarr(in+1)
;建立欲寫入之新資料陣列,in要加1的原因下面會寫
i=0 ;設定起始讀值
pc(0)=1 ;新資料陣列之初始值
while not
(eof(1)) do begin ;不到結尾讀不停
readf, 1,
format='(5x,i3,3x,f5.1,3x,f5.1,3x,f5.1,2(3x,f5.2))',No0,M0,X0,Y0,mux0,muy0 ;將星圖讀成這些參數
printf, 3,
format='(5x,i3,3x,f5.1,3x,f5.1,3x,f5.1,2(3x,f5.2),3x,i3)',No0,M0,X0,Y0,mux0,muy0,pc(i)
;立刻把這參數寫入,再多加一個pc(i)
pc(i+1)=pc(i)+1 ;把下一項pc(i)加上1
i=i+1
;把項次計數加1
endwhile
;因為星圖檔案結尾有in項,但寫入最後一個pc(in)後會再加1才endwhile,故pc=fltarr(要比in多1項)才裝得下
close,/all
;所以實際上pc(i)有in+1項,但只會寫入到pc(in)項就結束了。
end
----------------------------------------------------------------------------------------------------
pro oldwritenew
;將舊資料寫入新檔案,並加入標題和一項新資料。而該筆新資料是以陣列型式寫成的。
close,/all
in=0
openr, 1,
'D:\IDL method\NGC6633.prn' ;開啟星表原始檔,該檔案沒有標題列
while not (eof(1)) do begin
;開始讀檔案直到結尾
readf, 1, format='(5x,i3,3x,f5.1,3x,f5.1,3x,f5.1,3x,f5.2,3x,f5.2)',No0,M0,X0,Y0,mux0,muy0
in=in+1
;計數星表中有幾筆資料。有讀到一行計數器就+1
endwhile
print,' number of stars =' ,in
;給我看到底有幾顆!
close,/all
openr, 1, 'D:\IDL method\NGC6633.prn'
;再次開啟星表原始檔
openw, 3, 'D:\IDL method\NGC6633pc.txt' ;創建新檔案,供星表資料輸入
printf,
3, ' No M X Y mux muy Pc' ;將新檔案寫入標題
pc=fltarr(in+1)
;建立欲寫入之新資料陣列,in要加1的原因下面會寫
i=0 ;設定起始讀值
pc(0)=1 ;新資料陣列之初始值
while not
(eof(1)) do begin ;不到結尾讀不停
readf, 1,
format='(5x,i3,3x,f5.1,3x,f5.1,3x,f5.1,2(3x,f5.2))',No0,M0,X0,Y0,mux0,muy0 ;將星圖讀成這些參數
printf, 3,
format='(5x,i3,3x,f5.1,3x,f5.1,3x,f5.1,2(3x,f5.2),3x,i3)',No0,M0,X0,Y0,mux0,muy0,pc(i)
;立刻把這參數寫入,再多加一個pc(i)
pc(i+1)=pc(i)+1 ;把下一項pc(i)加上1
i=i+1
;把項次計數加1
endwhile
;因為星圖檔案結尾有in項,但寫入最後一個pc(in)後會再加1才endwhile,故pc=fltarr(要比in多1項)才裝得下
close,/all
;所以實際上pc(i)有in+1項,但只會寫入到pc(in)項就結束了。
end
- Feb 20 Sun 2011 09:50
-
一元二次方程式

撰寫者:陳姿穎
----------------------------------------------------------------------------------------------------
pro eqx
; This program want to calculate the solutions Quadratic Equations with Two Variables.
; ax^2 + bx + c = 0 with given costants a, b and c
; read a, b, c from the file, T1.txt
; the solutions, x1 and x2, will be print to the file, Sol_01.txt
; written by Ann Chen, final revised on May 20, 2010.
close,1
close,2
openr,1,"D:\IDL_learn\T1.txt"
openw,2,"D:\IDL_learn\Sol_01.txt"
aa=' '
ap=' + '
am=' - '
ai='i'
readf,1,aa
readf,1,aa
printf,2,' a b c x1 x2'
printf,2,'---------------------------------------------------'
WHILE (not(eof(1))) DO BEGIN
readf,1,format='(3(x,i4))',a,b,c
delta=b^2-4.*a*c
if delta ge 0 then begin
delta2=sqrt(delta)
x1=(-b+delta2)/(2.*a)
x2=(-b-delta2)/(2.*a)
printf,2,format='(3(x,i4),2(8x,f6.2))',a,b,c,x1,x2
endif else begin
xi=sqrt(-delta)/(2.*a)
xr=-b/(2.*a)
printf,2,format='(3(x,i4),2(x,f6.2,a,f6.2,a))',a,b,c,xr,ap,xi,ai,xr,am,xi,ai
endelse
endwhile
;aa=' '
;readf,1,aa ;readf > Read from file To skip the 1st line
;readf,1,aa ;To skip the 2nd line
close,1
close,2
print,'ok'
end
- Feb 19 Sat 2011 23:46
-
馬克士威-波茲曼分布

撰寫者:韋心潔
----------------------------------------------------------------------------------------------------
pro maxwell_boltzmann
;the program is the equation of maxwell_boltzmann
;written by Ruth Wei
m=1.67e-27 ;the mass of electron
k=1.38e-23 ;boltzmann constant
N=1.e5 ;mole
T1=20000.
T2=30000.
T3=40000.
v=findgen(400)*200
Nv1=N*(m/(2.*!pi*k*T1)^(3./2.))*(4.*!pi*v^2.)*exp((-m*v^2.)/(2.*k*T1))
Nv2=N*(m/(2.*!pi*k*T2)^(3./2.))*(4.*!pi*v^2.)*exp((-m*v^2.)/(2.*k*T2))
Nv3=N*(m/(2.*!pi*k*T3)^(3./2.))*(4.*!pi*v^2.)*exp((-m*v^2.)/(2.*k*T3))
;set_plot,"ps"
;device,filename="C:\Documents and Settings\Ruth\�ୱ\maxwell_boltzmann.ps
meanings = ['T=20000 K', 'T=30000 K', 'T=40000 K']
lines = [1,3,4]
plot,v,Nv1, linestyle=1, thick=1, title="maxwell velocity",xtitle="m/s", ytitle="mole/(m/s)"
oplot,v,Nv2, linestyle=3, thick=3
oplot,v,Nv3, linestyle=4, thick=4
;LEGEND, linestyle=lines, meanings, /top, /right;, Columns=8 ;, linestyle=lines
;LEGEND, linestyle=lines, meanings, /top, /right;, Columns=8 ;, linestyle=lines
xyouts, 5.e4, 1.e14, '........ 20000K'
xyouts, 5.e4, 9e13, '_._._._.30000K'
xyouts, 5.e4, 8e13, '_..._...40000K'
;device,/close
print,'ok'
end
- Mar 02 Mon 2009 00:14
-
塗鎮嘉
- Mar 02 Mon 2009 00:13
-
莫沛儒
- Mar 02 Mon 2009 00:12
-
徐逸翔


