dipenghao 发表于 2005-6-6 16:56:00

intersectWith()函数引起的速度问题?

我想求的一条多段线和所有等高线的交点。


首先获取了等高线的所有ID,然后依次打开 利用intersectWith()函数求交点,


由于等高线都是有高程的,而用来交点的多段线没有高程,所以我把这条多段线依次在使用求交函数之前,高程设置了等高线的高程(否则没有交点)。但是执行起来,却特别慢,100多个等高线遍历完需要8秒多。


请问用什么方法可以好一点?谢谢


部分源代码:


IdArr为等高线ID号数组


        crossptArr为三维点数组AcGePoint3dArray类


        pPolyX用来求交点的多段线指针


for(int i=0;i&lt;IdArr.length();i++)<BR>{<BR>               Id=IdArr.at(i);<BR>                <BR>       acdbOpenAcDbEntity(pEntity,Id,AcDb::kForRead);<BR>       AcDbPolyline *test=AcDbPolyline::cast(pEntity);<BR>       AcGePoint3dArray points;<BR>       double elev;<BR>       elev=test-&gt;elevation();<BR>       pPolyX-&gt;setElevation(elev); //设定在一个高程<BR>       pPolyX-&gt;intersectWith(test,AcDb::kOnBothOperands,points,NULL,NULL);<BR>                                                                               <BR>       if(points.length()!=0) //如果有交点的话 假定只有一个交点<BR>       {<BR>                                                                                                                                               <BR>                       for(int i=0;i&lt;points.length();i++)<BR>                                       {<BR>                                                               AcGePoint3d pd=points.at(i);<BR>        crossptArr.append(pd);                                        <BR>                                       }                                <BR>        }<BR>                                       <BR>       test-&gt;close();<BR>       pEntity-&gt;close();<BR>        <BR>        }//for

中国虫 发表于 2005-6-7 10:15:00

首先不在于等高线的条数,而是单条等高线的段数,也就是说单条Polyline的顶点数,如果顶点数太多,计算自然时间倍儿长。

dipenghao 发表于 2005-6-7 16:00:00

确实如此,由于等高线为数字化所得,等高线顶点个数很多,


请问版主有什么好的办法可以解决这个问题?

中国虫 发表于 2005-6-7 16:35:00

写个程序去掉一些顶点

lntuzjc 发表于 2005-9-29 20:12:00

去掉顶点,那交点是不是不准确呢??
页: [1]
查看完整版本: intersectWith()函数引起的速度问题?