【问题标题】:How could I calculate if XY coordinate is within certain area?如何计算 XY 坐标是否在某个区域内?
【发布时间】:2014-12-18 07:11:45
【问题描述】:

假设我有一个 10x10 的网格(可以是任何大小,但只是为了举例说明 10),并且该网格有 3 个点标记三角形的顶点(同样可以是任意数量的定界任意形状的点)。

所以我的问题是......有没有办法只给出这些信息来以编程方式确定任何给定坐标是否在该形状内?

免得说坐标是 3,2-7,3-5,5。我可以在遍历给定网格时挑选出落在这些点内的单元格吗?

【问题讨论】:

  • 这可能对你的研究有所帮助:这个问题通常被称为point in polygon
  • 您想检查几个点是否在一个多边形中,或者您是否有一个网格并且想要确定属于多边形一部分的所有个正方形?第一个是前面提到的多边形点问题,后者是光栅化,需要完全不同的算法(如果你希望它高效的话)。
  • 对于凸的情况,这很容易,但你说'任何任意形状',所以我假设你会有非凸的形状。对吗?
  • @delnan,我需要确定多边形中的所有点。
  • @TobiLehman 是的,也可以是非凸的。它用于创建非矩形的元胞自动机模拟。

标签: algorithm computational-geometry


【解决方案1】:

调用 P 您正在检查的点,以及 S1,S2,...,Sn 的 n 个顶点形状。

假设所有 i 的 P ≠ Si

  1. P 是否在边界上?
  2. 如果1为否,则随机选择一条经过P的线L
  3. 选择一个你知道在多边形外的点 F
  4. 按照 L 与 F 的形状的交集序列,直到找到 P(调用序列 F、...、P)
  5. 数序列F, ..., P,将值存入M
  6. 如果 M 是偶数,则 P 在多边形内,否则 P 不在多边形内

注意:通过引入起点F,我们改变了the point in polygon algorithm description on wikipedia中提到的奇偶性

【讨论】:

  • 请注意,OP 想要检查 all 点。它们正在有效地进行光栅化。对如此多的点运行多边形内的点查询比枚举所有点的算法效率要低。
  • 这是一个很好的点,尽管可以通过选择两个点 P 和 P' 将其减少一半,然后在 P 和 P' 上应用步骤 4-6。
  • 感谢您的帮助!
猜你喜欢
  • 2013-04-02
  • 2015-06-17
  • 2013-02-05
  • 2017-07-29
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多