当前位置:编程学习 > C#/ASP.NET >>

请问有没有办法判断一个对象是否在另一个封闭的polyline对象区域内或区域外以及是否相交?

请问有没有办法判断一个对象是否在另一个封闭的polyline对象区域内或区域外以及是否相交? --------------------编程问答-------------------- 可以考虑这样一个算法,遍历所有该对象的边缘点(如果有圆弧,定义圆弧的典型点),设有N个点,设点为PT1(N);再定一个已知在该PL线内部的点,设为PT2;计算端点为PT1(N)_PT2的直线与该PL线是否有交点,返回A(N),如果A(N)都=0,则这个对象在PL线内,如果都=1,则在PL线外部,如果部分=0,部分=1,则为相交. --------------------编程问答--------------------
太感谢了哈。但是感觉效率会很慢。主要是对象是块对象,进行阵列后要判断它们是否在某个封闭区域的内部。 --------------------编程问答-------------------- 是cad二次开发类吗?我也做这个的.
这个算法确实不效率,不过想不到其他的规范算法了.可以用检测重心方法,会快些.但是估计会有相交点.
可以用阵列的距离判断吗? --------------------编程问答-------------------- CAD常用的碰撞检测算法我记得有种叫包络盒法,就是近似产生外切矩形,然后通过矩形来近似判断是否碰撞,可能精度稍差,但是效率会提高 --------------------编程问答--------------------
引用 3 楼 u012557980 的回复:
是cad二次开发类吗?我也做这个的.
这个算法确实不效率,不过想不到其他的规范算法了.可以用检测重心方法,会快些.但是估计会有相交点.
可以用阵列的距离判断吗?


是cad的二次开发。
目前是利用对象的最小点和最大点所构成的包络框来做的的。但是还是感觉效果不是很理想。 --------------------编程问答--------------------
引用 4 楼 irix2008 的回复:
CAD常用的碰撞检测算法我记得有种叫包络盒法,就是近似产生外切矩形,然后通过矩形来近似判断是否碰撞,可能精度稍差,但是效率会提高

谢谢了哈,目前使用的应该是你说的这种方法。 --------------------编程问答-------------------- 包络盒法在这里估计满足不了吧,运算包络盒的运算时间不短,节约不了太多时间.
你还不如简化边缘点靠谱些.比如凹点直接忽略,曲线取1-2个点计算就可以了.这样应该能满足要求.
如果边缘点很多,那这个对象肯定越接近圆形.你可以考虑下面算法,求边缘点的坐标点的平均值,求得坐标中心PT0,求pt0到边缘点的距离L(N),求L(N)的最大值LMax,这里求圆(以PT0为圆心,LMax为半径),计算这个圆是否与PL线相交.
--------------------编程问答-------------------- 当点较多的时候,上面这个算法的精确度应该和包络矩形算法差不多,但是会快非常多,最小包络矩形算法复杂得甚至可以做一个课题研究.但是精准度不如直线相交法,如果是正多边形或者是点很多,圆和对象面积相差不大的时候会很准.
当点少的时候还是老老实实的用直线相交法吧.那个是肯定准确的.
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,