【问题标题】:how to determine if points is on shape and in shape?如何确定点是否在形状和形状上?
【发布时间】:2013-11-06 11:32:42
【问题描述】:

我有两个这样的:

bool isPointOnShape(int a, int b)
{

}

bool isPointInShape(int a, int b)
{

}

假设我有一个正方形,第一个点(左下角)是 x,y (0,0) 第二个点(左上角)是 (0,2),第三个是 (2,2),第四个是 (0 ,2)。

形状上的点是 (0,1) (1,2) (2,1) (1,0),形状上的点是 (1,1)

如何找出 shape / in shape 上的点并返回一个真值,以便我可以将其存储在某个地方?

【问题讨论】:

  • {1, 1} 不是唯一一个形状。为什么会这样?此外,找到这一点的方法显然取决于类型或形状及其参数,您从哪里获得这些信息?
  • 这些是栅格点,即像素吗?

标签: c++ computational-geometry


【解决方案1】:

对于潜在的非凸形状,您可以使用如下算法:

  1. 找出从(a,b) 开始的一条射线与多少条形状边相交。您可以选择任何光线,但如果光线是水平的或垂直的,则更容易计算交点。
  2. 如果交叉点数为奇数,则点在内部。

【讨论】:

    【解决方案2】:

    尝试在 openCV 中查看此 tutorial,解释如何使用 多边形测试中的点this wiki 页面也是一个很好的参考,它涵盖了其他几种方法。

    如果您不想使用 openCV - 通常可以使用光线投射算法:

    1. 从给定点(x,y)向任何你想要的方向取一条线,我们称之为L
    2. 对于((0,0),(0,2)), ((0,0),(2,0)), ((2,2),(0,2)), ((2,2),(2,0)) 中的每一行,测试该行是否与L 相交并计算相交的数量N
    3. 如果N 是奇数点(x,y) 在多边形中

    【讨论】:

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