【问题标题】:Point inside an irregular shape点在不规则形状内
【发布时间】:2012-09-02 04:28:22
【问题描述】:

我绝不是专业的程序员,所以请不要指望这里有复杂的方法或语言。不过,我会感谢您提出的具体化算法的建议和建议,在稍后阶段,我可以通过编程方式将其添加到我的项目中......这是问题所在:

想象空间中具有以下属性的任意点(点 X):

  • 有坐标
  • 位于二维表面上
  • 静止不动
  • 在任何给定时间都属于单个区域(其边界坐标也是已知的)。也就是说,它是其“父”元素的唯一“子”。同样,如果它不在一个区域内,它肯定在另一个区域内!

区域不是简单的正方形、四边形或圆形,而是不规则的形状。

现在,我的问题是:我如何确定: (i) 如果 X 点位于该特定区域内而不是相邻区域内; (ii) 该点属于哪个特定区域(在一组区域 A、B 或 C 中)?!?查看链接图像以更好地可视化问题:

PS:我仔细研究了处理Point in Polygon 问题的可能性(尤其是“光线投射算法”听起来很聪明!)但这似乎不是一个解决方案,因为 (i) 区域可能与每个区域相邻其他; (ii) 我需要确定一个点所属的区域,而不是它位于它内部/外部的区域。

提前非常感谢您!!!

【问题讨论】:

  • 如果区域的边界可能有曲率,区域的“边界坐标”如何代表该区域的实际边界?您是在使用某种曲线参数化还是通过多边形来近似面积?
  • 光线投射算法的变体可能会起作用。如果您从您的点投射出一条光线并查看它击中的第一个边缘,您会知道您的点位于共享该边缘的(最多)两个区域之一的内部。然后,您可以对两个候选区域中的每一个区域使用两次光线投射算法。
  • 对不起,我的错 - 我进一步编辑了我的问题:形状(区域)段的坐标是在 2D 中定义的,没有曲率!
  • 你有边界区域(区域)的坐标吗?如果是,那么您有多少个坐标?我不知道您拥有的确切输入数据是什么。我假设您有足够的区域坐标,以便可以很好地近似绘制区域。在这种情况下,一种解决方案可以是找出具有最大值的点。 & 分钟。 X坐标值。这给出了 X 轴上区域的边界。如果您的点位于该区域内,则其 x 坐标必须介于这些值之间。对 Y 坐标执行相同的操作。但是,这可能不是一个有效的算法。
  • 不确定您所说的“我需要确定一个点所属的区域,而不是它位于其内部/外部的区域”。除非您使用我不理解的“属于”的含义,否则您确定该点属于哪个区域的方法是通过测试它是否在您的集合中的每个可能区域内:它将正好在 1 内其中。 (您可以通过使用 Sandyiscool 建议的边界框/圆圈来消除某些区域的可能性来加快速度。)

标签: algorithm 2d shape


【解决方案1】:

程序员会这样做:

  1. 一个函数将一个区域数组和一个点作为参数。

  2. 创建一个循环 - 检查您的所有区域和每个区域

    通过射线投射算法检查该点是否属于那里。

    如果不是,继续循环,

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

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

当然,你可以改进算法,考虑到共同的边界,而不是重复计算它们的角度,但现在这样的算法显然是不可能的。即使是一个优秀的程序员也会从简单但有效的事情开始

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多