idl 原函式分析

2021-07-06 04:19:36 字數 2964 閱讀 7164

pro course_13

;定義檔案路徑

myrootdir='d:\3'

;遍歷資料夾

filearr = file_search(myrootdir,'*.gz',count=num);

for fileindex=0,num-num,1 do begin

;開啟檔案

openr , lun , filearr[fileindex] , /compress,/get_lun

;構造顯示標題

filename=file_basename(filearr[fileindex]);  ;獲取檔名

filename=strmid(filename,0,14)                  ;檔名字串處理

sat=strmid(filename,0,5)+' '                    ;擷取0-5個位元組為sat

year=strmid(filename,6,4)+' '                   ;擷取6-10個位元組為年

month=strmid(filename,10,2)+' '                 ;擷取6-10個位元組為月

day=strmid(filename,12,2)+' '                   ;擷取6-10個位元組為日

diplayname=sat+year+month+day                   ;顯示的字串(名字)等於這些字串組合一起,他在image函式會呼叫這個字串用作標題

;讀入陣列&抽樣

flearr = bytarr(1440,720,3)                     ;建立1440列720行3個位元組的隨機數組

;readu , lun , flearr                            ;讀lun識別符號的檔案到idl變數庫

help,flearr;[160:320,340:480,0]                 ;

disspd=flearr(*,*,0)*0.2                        ;除了陣列的位元組數 所有隨機的x,y陣列座標變成原來的0.2倍

wdspd = congrid(flearr[160:320,340:480,0],80,70)  ;congrid函式萎縮或膨脹量的任意陣列的大小,80,70可能表示x,y軸的膨脹度

wddir = congrid(flearr[160:320,340:480,1],80,70)

;help,wdspd,wddir

;過濾資料

gt250idxdir = where(wddir gt 250);                 ;找到大於250的索引

wdspd[gt250idxdir] = 0;                             ;大於250對應的索引的值(風速)=0

gt250idxdir = where(disspd gt 250*0.2);             ;找到大於250的0.2倍的索引

disspd[gt250idxdir] = 0;                            ;大於250的0.2倍對應的索引的值(風速)=0

disspd[gt250idxdir] = max(disspd)+0.1;              ;讓上述這個值 = 其中隨機且經過篩選的最大風速的那個點 + 0.1

;計算u和v,x和y

wdspd = wdspd*0.2                                  ;風速變為0.2倍

wddir = wddir*1.5                                  ;方向變成1.5倍

wdspd[0,*]=0                                      ;x=0,y=任意  這個點的座標的值全部置為0    ???

u = wdspd*sin(wddir/180*(!pi))                     ;數學變換

v = wdspd*cos(wddir/180*(!pi))

x = dindgen(80)*2                                  ;建立乙個雙精度浮點陣列(80個,值為0,1,2,3,...,80),x,y值擴大兩倍。

y = dindgen(70)*2

;繪圖spdimg = image(congrid(disspd[160:320,340:480,0],160,140),rgb_table=39,title=diplayname,grid_units=1,position=[0.3,0.3,0.9,0.9]) ;disspd是乙個陣列(中間引數取點),rgb_table是rgb顏色,title是標題顯示的字串,grid—unit是漸變的程度係數,position是位置(可能是漸變的起始位置??)

;載入vector

vec = vector(color='black',u,v,x,y,/overplot,length_scale=0.00001,head_angle=26,head_size=0.3,thick=0.2)

grdx= axis(tickdir=1,'x',location=[0,0],axis_range=[40,80],coord_transform=[40,0.25],minor=0,major=9)    ;軸的功能新增到現有的idl圖形軸(x軸)。

grdy= axis(tickdir=1,'y',location=[0,0],axis_range=[-5,30],coord_transform=[-5,0.25],minor=0,major=8)

;colorbar

c = colorbar(target=spdimg,rgb_table=39,title='wind speed (m/s)',position=[0.15,0.1,0.85,0.15])   ;最下方的顏色條

;關閉檔案釋放裝置號

close , lun

free_lun , lun

endfor

end

OSTaskCreate()函式分析

int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...

getopt函式分析

函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...

uCOS OSTaskCreate()函式分析

int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...