2012-09-08 86 views
3

我绝不是专业程序员,所以请不要期待这里有复杂的方法或语言。不过,我会感谢您的建议和建议,以实现一个算法,在稍后阶段,我可以以编程方式添加到我的项目...这是问题:不规则形状内的点

想象一下任意点(点X)以下属性:

  • 具有坐标
  • 位于一个2D表面
  • 是静止
  • 属于单个区域(其中边界坐标也是已知的)在任何给定的时间。也就是说,它是其“父”元素的唯一“孩子”。再一次,如果它不坐在一个区域,它肯定坐在另一个区域内!

一个区域不是简单的正方形,四边形或圆形,而是一个不规则的形状。我现在的问题是:我如何确定: (i)如果X点位于特定区域内而不是邻近区域; (ii)该点属于哪个特定区域(在一组区域A,B或C中)?见链接的图像更好地看到问题:

PS:我仔细研读处理Point in Polygon问题(特别是“光线投射算法”,听起来很聪明!)的可能性,但它似乎没有因为(i)区域可能彼此相邻; (ii)我需要确定一个点所属的区域多于它位于其内部/外部的区域。

非常感谢您提前!

+1

如果区域的边界可能有曲率,区域的“边界坐标”如何表示该区域的实际边界?您是使用某种曲线参数化还是使用多边形逼近区域? –

+0

光线投射算法的变体可能会起作用。如果你从你的观点投射出一束光线,并观察它发出的第一个边缘,你就会知道你的观点是在分享这一边缘的(最多)两个区域之一内。然后,您可以对两个候选区域的每一个使用两次光线投射算法。 –

+0

对不起,我的错 - 我进一步编辑了我的问题:在2D中定义了形状(面)段的坐标,没有曲率! –

回答

0

程序员会愿意这样做:

  1. 函数正在作为参数应用的领域和角度的数组。

  2. 构成一个循环 - 检查所有的区域,由光线投射algorythm每一个

    检查,如果该点属于那里。

    如果没有,继续循环,

    如果是的话,完成函数返回当前区域的数量。

  3. 如果您不在区域中,则返回-1。

当然,你也可以提高algorythm,考虑到共同边界,而不是重复角度的计数他们,但这样的algorythms显然你的possiblilities现在。而且即使是一个好的程序员也会从容易起步,但工作