idl中的几何运算_第1页
idl中的几何运算_第2页
idl中的几何运算_第3页
idl中的几何运算_第4页
idl中的几何运算_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、IDL中的几何图形数学运算几何形状,分为点、线、多边形(面)、体几类,利用IDL对这些形状的几何运算,大致分下面几个部分。1、点集运算点与点之间求距离: DISTANCE_MEASUREIDL自带)2、线相关计算点到直线的距离 PNT_LINE (IDL自带)或 CalDistancePtoL计算两直线的交点 CAL2LINESINTERSECTPOINT.pro线段与坐标轴的夹角(数学坐标系)3、多边形相关(面)求多边形面积:poly_area、(IDLanROI)-> ComputeGeometry, area = result (

2、IDL 自带) 求多边形周长:(IDLanROI)-> ComputeGeometry, PERIMETER = result IDL 自带)点坐标是否在多边形范围内:(IDLanROI)->ContainsPoints (IDL自带)三点求通过该系列三个点的圆心坐标和圆半径;CIR_3PNT(IDL自带)多边形与曲面交集: MESH_CLIP(IDL自带)两个多边形合并:MESH_MERGE(IDL自带)多边形是否空间闭合:MESH_ISSOLID( IDL自带)多边形包含的三角形个数:MESH_NUMTRIANGLES IDL自带)复杂多边形正确显示:IDLgrTessella

3、tor (IDL自带)求两个平面的夹角 四面体与平面相交:TETRA_CLIR IDL自带)4、体相关体数据任意方向切面:EXTRACT_SLICEIDL自带)重点推荐MESH_OBJ可以创建三角形、矩形、圆锥、圆柱、任意多边形旋转等。;Mesh_Obj,2, Vertex_List, Polygon_List, $;调用格式;Mesh_Obj, Type, Vertex_List, Polygon_List , $;Arrayl , Array2 , /CLOSED , /DEGREES , $;P1, P2, P3, P4, P5 = value;Typ

4、e = 6创建旋转后模型的点坐标及连接关系;Vertex_List创建后的点坐标集;Polygon_List旋转模型的点连接关系;Array1创建旋转模型的起始数据集;Array2 'Type为6'时不支持;/Closed旋转后模型闭合;/DEGREES旋转的输入参数为角度,默认是弧度;P1 旋转后的边数;P2 -旋转的中心点;P3 -旋转的方向0,0,1;P4 -旋转起始角度;P5 -旋转结束角度附源码:附源码: ; 仝叁计算两个点的距离Write By DYQ可用distance_measure函数替代 function CalDistance, pointl, point

5、2 compile_opt idl2 Return,SQRT(point10-point20)A2+(point11-point21)A2+(point12-point 22)a2) end; 仝叁 Write By ZML 计算点到直线的距离 s = SQRT(p*(p-a)*(p-b)*(p-c)p = (a+b+c)/2 Modified By DYQ function CalDistancePtoLine, point0,linePos1,linePos2a = CalDistance(point0,linePos1) b =CalDistance(point0,linePos2);S

6、QRT(point0-linePos20)A2+(point1- linePos21)A2)c =CalDistance(linePos1,linePos2);SQRT(linePos20-linePos10)A2+(line Pos21-linePos11)A2)p = (a+b+c)*0.5s = SQRT(p*(p-a)*(p-b)*(p-c)Return, s*2/c end ; ;求集合的并集 copy From DAVID's Code a aJFUNCTION SETUNION, a, b;COMPILE_OPT StrictArrIF N_ELEMENTS(a) EQ

7、0 THEN RETURN, b;A union NULL = aIF N_ELEMENTS(b) EQ 0 THEN RETURN, a;B union NULL = bRETURN,WHERE(HISTOGRAM(a,bOMin = omin) + omin ; Return combined set END ; ;去除2维数组中重复的元素;2010年3月25日;Write By DYQ;FUNCTION UNIQARRAY, inArray ;num = N_ELEMENTS(inArray0,*)xArray = REFORM(inArray0,*) yArray = REFORM(i

8、nArray1,*);xUniq = UNIQ(xArray(SORT(xArray) yUniq = UNIQ(yArray(SORT(yArray) ;RETURN, inArray*,SETUNION(xUniq,yUniq)END ;计算两个点的距离,XY水平面;2008-4-28;Write By DYQ;其实可以用DISTANCE_MEASURER,没办法,写好了才发现IDL自带 o( n_n )o;FUNCTION CALDISTANCE, pointl, point2pointl = point1*1.point2 = point2*1.RETURN, SQRT(point10

9、-point20)A2+(point11-point21)A2) END ;计算点到直线的距离Write By DYQ其实可以用PNT_LINE函数,没办法,写好了才发现IDL自带o(A_n)o FUNCTION CALDISTANCEPTOLINE, point0,linePos1,linePos2a = CALDISTANCE(point0,linePos1) b =CALDISTANCE(point0,linePos2);SQRT(point0-linePos20)A2+(point1- linePos21)A2)c =CALDISTANCE(linePos1,linePos2);SQR

10、T(linePos20-linePos10)A2+(linePos21-linePos11)A2)p = (a+b+c)*0.5s = SQRT(p*(p-a)*(p-b)*(p-c)RETURN, s*2/cEND;计算两直线的交点2008-9-27Write By DYQ输入P1:直线1的起点坐标-P2:直线1的终点坐标P1S:直线2的起点坐标-P2S:直线2的终y点坐标相交则返回交点,不相交则返回-1Modified By DYQ2008-10-29 - 增加了 p1、p2及P1S P2s重合的判断Example:直线:-1,-1,1,1;直线:1,0,0,1;point = Cal2l

11、inesintersectpoint(-1,-1,1,1,1,0,0,1)FUNCTION CAL2LINESINTERSECTPOINT, P1,P2,P1S,P2s;COMPILE_OPT IDL2;如果线1点重合了IF ARRAY_EQUAL(P1, P2) THEN BEGINIF ARRAY_EQUAL(P1S, P2S ) THEN BEGINIF P1 EQ P2 THEN RETURN,P1RETURN, -1ENDIF ELSE BEGINIF CALDISTANCEPTOLINE(P1,P1S,P2S) EQ 0 THEN RETURN, P1 RETURN,-1ENDEL

12、SE;线1的点不重合ENDIF ELSE BEGINIF ARRAY_EQUAL(P1S ,P2S) THEN BEGINRETURN, P1SENDIF ELSE BEGIN;如果第一条直线垂直x轴IF (P10-P20) EQ 0 THEN BEGINipX = p10;第二条也垂直IF (P1S0-P2S0) EQ 0 THEN BEGIN;不相交RETURN, -1 ENDIF ELSE BEGIN;k2 = FLOAT(P1S1-P2S1)/(P1S0-P2S0)b2 =FLOAT(P1S0*P2s1-P2s0*P1S1)/(P1S0-P2s0) ;ipY = k2*ipX+b2RE

13、TURN,ipX,ipY ENDELSE;第二条直线垂直X轴ENDIF ELSE IF (P1S0-P2S0) EQ 0 THEN BEGINipX = p2s0;k1 = FLOAT(P11-P21)/(P10-P20)b1 = FLOAT(P10*P21-P20*P11)/(P10-P20)ipY = k1*ipX+b1RETURN,ipX,ipY;都不垂直ENDIF ELSE BEGINk1 = FLOAT(P11-P21)/(P10-P20)bl = FLOAT(P10*P21-P20*P11)/(P10-P20) ;k2 = FLOAT(P1S1-P2S1)/(P1S0-P2S0)b

14、2 = FLOAT(P1S0*P2s1-P2s0*P1S1)/(P1S0-P2s0);如果都垂直Y轴IF (K2 EQ 0) AND(K1 EQ 0) THEN RETURN,-1ipX = (b2-b1)/(k1-k2)ipY = (k1*b2-k2*b1)/(k1-k2)RETURN,ipX,ipYENDELSEENDELSEENDELSE;END;;计算平面上直线是否与多边形相交,有交点可返回;2010年3月25日;Write By DYQ ;调用格式 result = CalLineInPolygon(linePoints, polyPoints);LinePoints:两个点的二维坐

15、标2,2,否则返回-1;PolyPoints:多边形点的二维坐标2,n,否则返回-1;FUNCTION CALLINEINPOLYGON, linePoints, polyPoints COMPILE_OPT idl2 ;IF ARRAY_EQUAL(SIZE(inPoints,/dimension), 2,2) THEN RETURN,-1 ;点个数pointNum = (SIZE(polyPoints,/dimension)1;相交标识 sign = -1 ipoints = 0,0 ;循环求解 FOR i=0, pointNum -1 DO BEGIN ;point = CAL2LINE

16、SINTERSECTPOINT(linePoints*,0, $ linePoints*,1, polyPoints*,i,polyPoints*,(i+1) MODpointNum)IF N_ELEMENTS(point) GT 1 THEN BEGIN ipoints = iPoints,REFORM(point) sign = 1ENDIFENDFOR;IF sign EQ -1 THEN RETURN, sign $ELSE result = UNIQARRAY(iPoints*,1:N_ELEMENTS(iPoints0,*)-1) ;判断交点是否在多边形内;oROI = OBJ_N

17、EW('IDLanROI', polyPoints)conArr = 0,0FOR i=0, N_ELEMENTS(result)/2-1 DO BEGIN ;psign= oROI->CONTAINSPOINTS(result*,i);有在多边形内的点IF psign NE 0 THEN BEGIN conArr = conArr, result*,iENDIFENDFOROBJ_DESTROY,oROI;IF N_ELEMENTS(conArr)/2 EQ 1 THEN RETURN, -1 ELSERETURN,conArr*,1:N_ELEMENTS(conArr

18、)/2-1ENDJ J;根据经过两点线段与坐标轴的夹角(弧度) ;Point1 到 point2 线段;Write By DYQ;2007-10-27;FUNCTION Cal2pointsangle ,point1,point2 ;point1 = FLOAT(point1)point2 = FLOAT(point2) ;dx = point20- point10dy = point21- point11IF dx EQ 0 THEN BEGIN ; x 轴IF dy GT 0 THEN result = !PI/2 ELSE $ result = 3*!PI/2ENDIF ELSE BEGINIF dy EQ 0 THEN BEGIN ;x 轴I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论