Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何确定点是在形状上还是在形状中?_C++_Computational Geometry - Fatal编程技术网

C++ 如何确定点是在形状上还是在形状中?

C++ 如何确定点是在形状上还是在形状中?,c++,computational-geometry,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) 如何找出shape/in shape上的点并返回真实值,以便将其存储在某个位置?尝试在openCV中介绍如何使用多边形测试中

我有两个:

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上的点并返回真实值,以便将其存储在某个位置?

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

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

  • 从给定点
    (x,y)
    向任意方向取一条线,我们称之为
    L
  • 对于
    ((0,0),(0,2)),((0,0),(2,0)),((2,2),(0,2)),((2,2),(2,0)),(/code>中的每一条线,测试该线是否与
    L
    相交,并计算相交数
    N
  • 如果
    N
    为奇数,则点
    (x,y)
    位于多边形中

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

  • 查找从
    (a,b)
    开始与射线相交的形状边数。您可以选择任何光线,但如果光线是水平或垂直的,则更容易计算交点
  • 如果交点的数量为奇数,则点位于内部

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