如何确定点是形状上还是形状

how to determine if points is on shape and in shape?

本文关键字:何确定      更新时间:2023-10-16

我有两个:

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)

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

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

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

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

如果你不想使用 openCV - 一般来说你可以使用 Ray 投射算法:

  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)点在多边形中