IDL中幾何圖形的數(shù)學(xué)運算函數(shù)_第1頁
IDL中幾何圖形的數(shù)學(xué)運算函數(shù)_第2頁
IDL中幾何圖形的數(shù)學(xué)運算函數(shù)_第3頁
IDL中幾何圖形的數(shù)學(xué)運算函數(shù)_第4頁
IDL中幾何圖形的數(shù)學(xué)運算函數(shù)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

./IDL中幾何圖形的數(shù)學(xué)運算函數(shù)幾何形狀,分為點、線、多邊形〔面、體幾類,利用IDL對這些形狀的幾何運算,大致分下面幾個部分。

1、點集運算

點與點之間求距離:DISTANCE_MEASURE〔IDL自帶

2、線相關(guān)

計算點到直線的距離PNT_LINE〔IDL自帶或CalDistancePtoL

計算兩直線的交點CAL2LINESINTERSECTPOINT.pro

線段與坐標軸的夾角〔數(shù)學(xué)坐標系

3、多邊形相關(guān)〔面

求多邊形面積:poly_area、<IDLanROI>->ComputeGeometry,area=result〔IDL自帶

求多邊形周長:<IDLanROI>->ComputeGeometry,PERIMETER=result〔IDL自帶

點坐標是否在多邊形圍:<IDLanROI>->ContainsPoints〔IDL自帶

三點求通過該系列三個點的圓心坐標和圓半徑;CIR_3PNT〔IDL自帶

多邊形與曲面交集:MESH_CLIP〔IDL自帶

兩個多邊形合并:MESH_MERGE〔IDL自帶

多邊形是否空間閉合:MESH_ISSOLID〔IDL自帶

多邊形包含的三角形個數(shù):MESH_NUMTRIANGLES〔IDL自帶

復(fù)雜多邊形正確顯示:IDLgrTessellator〔IDL自帶

求兩個平面的夾角

四面體與平面相交:TETRA_CLIP〔IDL自帶

4、體相關(guān)

體數(shù)據(jù)任意方向切面:EXTRACT_SLICE〔IDL自帶

重點推薦MESH_OBJ,可以創(chuàng)建三角形、矩形、圓錐、圓柱、任意多邊形旋轉(zhuǎn)等。

;Mesh_Obj,2,Vertex_List,Polygon_List,$

;調(diào)用格式

;Mesh_Obj,Type,Vertex_List,Polygon_List,$

;Array1[,Array2][,/CLOSED][,/DEGREES],$

;[P1,P2,P3,P4,P5=value]

;Type=6創(chuàng)建旋轉(zhuǎn)后模型的點坐標及連接關(guān)系

;Vertex_List創(chuàng)建后的點坐標集

;Polygon_List旋轉(zhuǎn)模型的點連接關(guān)系

;Array1創(chuàng)建旋轉(zhuǎn)模型的起始數(shù)據(jù)集

;Array2'Type為6'時不支持

;/Closed旋轉(zhuǎn)后模型閉合

;/DEGREES旋轉(zhuǎn)的輸入?yún)?shù)為角度,默認是弧度

;P1-旋轉(zhuǎn)后的邊數(shù)

;P2-旋轉(zhuǎn)的中心點

;P3-旋轉(zhuǎn)的方向[0,0,1]

;P4-旋轉(zhuǎn)起始角度

;P5-旋轉(zhuǎn)結(jié)束角度

附提到的系列源碼:CODE:;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;計算兩個點的距離;WriteByDYQ;可用distance_measure函數(shù)替代;functionCalDistance,point1,point2compile_optidl2;Return,SQRT<<point1[0]-point2[0]>^2+<point1[1]-point2[1]>^2+<point1[2]-point2[2]>^2>end;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;WriteByZML;計算點到直線的距離;s=SQRT<p*<p-a>*<p-b>*<p-c>>{p=<a+b+c>/2};ModifiedByDYQ;functionCalDistancePtoLine,point0,linePos1,linePos2a=CalDistance<point0,linePos1>b=CalDistance<point0,linePos2>;SQRT<<point[0]-linePos2[0]>^2+<point[1]-linePos2[1]>^2>c=CalDistance<linePos1,linePos2>;SQRT<<linePos2[0]-linePos1[0]>^2+<linePos2[1]-linePos1[1]>^2>p=<a+b+c>*0.5s=SQRT<p*<p-a>*<p-b>*<p-c>>Return,s*2/cendCODE:;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;求集合的并集;copyFromDAVID'sCode^_^;FUNCTIONSETUNION,a,b;COMPILE_OPTStrictArrIFN_ELEMENTS<a>EQ0THENRETURN,b;AunionNULL=aIFN_ELEMENTS<b>EQ0THENRETURN,a;BunionNULL=bRETURN,WHERE<HISTOGRAM<[a,b],OMin=omin>>+omin;ReturncombinedsetEND;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;;去除2維數(shù)組中重復(fù)的元素;;20XX3月25日;WriteByDYQ;FUNCTIONUNIQARRAY,inArray;num=N_ELEMENTS<inArray[0,*]>xArray=REFORM<inArray[0,*]>yArray=REFORM<inArray[1,*]>;xUniq=UNIQ<xArray<SORT<xArray>>>yUniq=UNIQ<yArray<SORT<yArray>>>;RETURN,inArray[*,SETUNION<xUniq,yUniq>]END;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;計算兩個點的距離,XY水平面;;2008-4-28;WriteByDYQ;其實可以用DISTANCE_MEASURE函數(shù),沒辦法,寫好了才發(fā)現(xiàn)IDL自帶o<∩_∩>o;FUNCTIONCALDISTANCE,point1,point2;point1=point1*1.point2=point2*1.RETURN,SQRT<<point1[0]-point2[0]>^2+<point1[1]-point2[1]>^2>END;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;計算點到直線的距離;;WriteByDYQ;其實可以用PNT_LINE函數(shù),沒辦法,寫好了才發(fā)現(xiàn)IDL自帶o<∩_∩>o;FUNCTIONCALDISTANCEPTOLINE,point0,linePos1,linePos2a=CALDISTANCE<point0,linePos1>b=CALDISTANCE<point0,linePos2>;SQRT<<point[0]-linePos2[0]>^2+<point[1]-linePos2[1]>^2>c=CALDISTANCE<linePos1,linePos2>;SQRT<<linePos2[0]-linePos1[0]>^2+<linePos2[1]-linePos1[1]>^2>p=<a+b+c>*0.5s=SQRT<p*<p-a>*<p-b>*<p-c>>RETURN,s*2/cEND;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;計算兩直線的交點;2008-9-27;WriteByDYQ;;輸入;P1:直線1的起點坐標P2:直線1的終點坐標;P1S:直線2的起點坐標P2S:直線2的終y點坐標;相交則返回交點,不相交則返回-1;ModifiedByDYQ;2008-10-29--增加了p1、p2及P1S、P2S重合的判斷;Example:;直線:[-1,-1],[1,1];直線:[1,0],[0,1];point=Cal2linesintersectpoint<[-1,-1],[1,1],[1,0],[0,1]>FUNCTIONCAL2LINESINTERSECTPOINT,P1,P2,P1S,P2S;COMPILE_OPTIDL2;如果線1點重合了IFARRAY_EQUAL<P1,P2>THENBEGINIFARRAY_EQUAL<P1S,P2S>THENBEGINIFP1EQP2THENRETURN,P1RETURN,-1ENDIFELSEBEGINIFCALDISTANCEPTOLINE<P1,P1S,P2S>EQ0THENRETURN,P1RETURN,-1ENDELSE;線1的點不重合ENDIFELSEBEGINIFARRAY_EQUAL<P1S,P2S>THENBEGINRETURN,P1SENDIFELSEBEGIN;如果第一條直線垂直x軸IF<P1[0]-P2[0]>EQ0THENBEGINipX=p1[0];;第二條也垂直IF<P1S[0]-P2S[0]>EQ0THENBEGIN;不相交RETURN,-1ENDIFELSEBEGIN;k2=FLOAT<P1S[1]-P2S[1]>/<P1S[0]-P2S[0]>b2=FLOAT<P1S[0]*P2S[1]-P2S[0]*P1S[1]>/<P1S[0]-P2S[0]>;ipY=k2*ipX+b2RETURN,[ipX,ipY]ENDELSE;第二條直線垂直X軸ENDIFELSEIF<P1S[0]-P2S[0]>EQ0THENBEGINipX=p2s[0];k1=FLOAT<P1[1]-P2[1]>/<P1[0]-P2[0]>b1=FLOAT<P1[0]*P2[1]-P2[0]*P1[1]>/<P1[0]-P2[0]>ipY=k1*ipX+b1RETURN,[ipX,ipY];都不垂直ENDIFELSEBEGINk1=FLOAT<P1[1]-P2[1]>/<P1[0]-P2[0]>b1=FLOAT<P1[0]*P2[1]-P2[0]*P1[1]>/<P1[0]-P2[0]>;k2=FLOAT<P1S[1]-P2S[1]>/<P1S[0]-P2S[0]>b2=FLOAT<P1S[0]*P2S[1]-P2S[0]*P1S[1]>/<P1S[0]-P2S[0]>;如果都垂直Y軸IF<K2EQ0>AND<K1EQ0>THENRETURN,-1ipX=<b2-b1>/<k1-k2>ipY=<k1*b2-k2*b1>/<k1-k2>RETURN,[ipX,ipY]ENDELSEENDELSEENDELSE;END;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;;計算平面上直線是否與多邊形相交,有交點可返回;20XX3月25日;WriteByDYQ;;調(diào)用格式result=CalLineInPolygon<linePoints,polyPoints>;;LinePoints:兩個點的二維坐標[2,2],否則返回-1;;PolyPoints:多邊形點的二維坐標[2,n],否則返回-1;FUNCTIONCALLINEINPOLYGON,linePoints,polyPointsCOMPILE_OPTidl2;IFARRAY_EQUAL<SIZE<inPoints,/dimension>,[2,2]>THENRETURN,-1;點個數(shù)pointNum=<SIZE<polyPoints,/dimension>>[1];相交標識sign=-1ipoints=[0,0];循環(huán)求解FORi=0,pointNum-1DOBEGIN;point=CAL2LINESINTERSECTPOINT<linePoints[*,0],$linePoints[*,1],polyPoints[*,i],polyPoints[*,<i+1>MODpointNum]>IFN_ELEMENTS<point>GT1THENBEGINipoints=[[iPoints],[REFORM<point>]]sign=1ENDIFENDFOR;IFsignEQ-1THENRETURN,sign$ELSEresult=UNIQARRAY<iPoints[*,1:N_ELEMENTS<iPoints[0,*]>-1]>;判斷交點是否在多邊形;oROI=OBJ_NEW<'IDLanROI',polyPoints>conArr=[0,0]FORi=0,N_ELEMENTS<result>/2-1DOBEGIN;psign=oROI->CONTAINSPOINTS<result[*,i]>;有在多邊形的點IFpsignNE0THENBEGINconArr=[[conArr],[result[*,i]]]ENDIFENDFOROBJ_DESTROY,oROI;IFN_ELEMENTS<conArr>/2EQ1THENRETURN,-1ELSERETURN,conArr[*,1:N_ELEMENTS<conArr>/2-1]END;;≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌;;測試程序PROTEST;;restore,'C:\Users\Administrator\Desktop\CalLineInPolygon.sav'linePoints=[[0,0],[2,1]]polyPoints=[[1,1],[2,1],[3,2],[4,1]]points=CALLINEINPOLYGON<linePoints,polyPoints>PRINT,pointsEND;CODE:;;;;根據(jù)經(jīng)過兩點線段與坐標軸的夾角<弧度>;Point1到point2線段;WriteByDYQ;2007-10-27;FUNCTIONCal2pointsangle,point1,point2;point1=FLOAT<point1>point2=FLOAT<point2>;dx=point2[0]-point1[0]dy=point2[1]-point1[1]IFdxEQ0THENBEGIN;x軸IFdyGT0THENresult=!PI/2E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論