0

我有两个这样的:

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)

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

4

2 回答 2

1

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

  1. 找出从 开始有多少条形状边与射线相交(a,b)。您可以选择任何射线,但如果射线是水平的或垂直的,则更容易计算交点。
  2. 如果交叉点的数量是奇数,则点在内部。
于 2013-11-06T11:40:03.400 回答
0

尝试在 openCV 中阅读本教程,解释如何使用多边形测试中的点这个wiki 页面也是一个很好的参考,它涵盖了其他几种方法。

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

  1. 从给定点(x,y)沿您想要的任何方向取一条线,我们称之为L
  2. 对于((0,0),(0,2)), ((0,0),(2,0)), ((2,2),(0,2)), ((2,2),(2,0))测试中的每条线,如果该线与 with 相交L并计算相交的数量N
  3. 如果N是奇数,则该点(x,y)在多边形中
于 2013-11-06T11:37:14.900 回答