如何确定点的形状和形状?

时间:2013-11-06 11:32:42

标签: c++ computational-geometry

我有两个:

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)

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

2 个答案:

答案 0 :(得分:1)

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

  1. 查找从(a,b)开始的光线相交的形状边数。您可以选择任何光线,但如果光线是水平的或垂直的,则更容易计算交叉点。
  2. 如果交叉点的数量是奇数,则指向内部。

答案 1 :(得分:0)

尝试在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 ,则{li>为N测试中的每一行测试
  3. 如果N为奇数,则点(x,y)位于多边形