IsPointInside()用于曲线轮廓

时间:2013-09-12 08:35:06

标签: algorithm math floating-point

我们都知道如何检查if a 2D point is inside a 2D polygon但是如何确切地检查一个点是否在由线,弧,椭圆弧和样条线构成的复杂轮廓内?我的意思是不使用偏差容差将其转换为2D多边形。

你知道这个问题的任何有效方法吗?

感谢。

2 个答案:

答案 0 :(得分:3)

绕线/交叉测试不仅适用于多边形。您只需要能够将轮廓与特定线相交(并且在绕组编号的情况下,以评估该点处轮廓的切线)。你还需要对数值精度有点小心,并记住双根算作2个交点。

对于样条线,虽然有线/样条交叉方法,但是对多边形进行离散化(并且记住只需要通过线的多边形的小部分)可能是最简单的方法。

答案 1 :(得分:0)

我不确定您使用的数据类型,但如果您能以某种方式对图像处理进行类比... Ray Casting Algorithm可以帮助您找到答案。

point in polygon问题可以在任何类型的复杂结构中实现,通常效果很好。检查此链接是否有伪代码:Ray Casting

但是,如果您没有任何明确定义的方法来查找复杂轮廓中的交点,则无法使用。

您可以尝试打破寻找交叉路口的子问题:

  1. The intersection point between a spline and a line
  2. Line Segment Circle Intersection