Math 确定点是否位于多边形的顶点上

Math 确定点是否位于多边形的顶点上,math,polygon,computational-geometry,Math,Polygon,Computational Geometry,给定多边形的坐标, 我发现了许多算法来检测点是否在多边形中,例如:和。但这些算法都无法检测点是否位于该多边形的顶点上。例如,我有一个多边形: |---------------------| | | | | |---------------------| 我的观点在右上角。我想要一个算法,告诉我点是否在多边形内。如何做到这一点?除了处理与浮点相关的问题(不完全匹配但足够接近)之外,相同的算法应该适用于两者。 只需在多

给定多边形的坐标, 我发现了许多算法来检测点是否在多边形中,例如:和。但这些算法都无法检测点是否位于该多边形的顶点上。例如,我有一个多边形:

|---------------------|
|                     |
|                     |
|---------------------|

我的观点在右上角。我想要一个算法,告诉我点是否在多边形内。如何做到这一点?

除了处理与浮点相关的问题(不完全匹配但足够接近)之外,相同的算法应该适用于两者。
只需在多边形内拾取一个点,创建从测试点到内部点的测试线段,然后,对于多边形中的每个线段,确定测试线段是否与该多边形线段相交,以计算为相交,计算多边形线段一端打开、另一端闭合的相交,即。,如果交点与多边形的起点完全相同,则对其进行计数,但如果交点与端点完全相同,则不进行计数。您需要这样做,以便当测试线段与多边形顶点相交时,只能将其计算为与顶点任一侧的两个线段之一相交


然后,如果测试点位于多边形内部,则交点数将为偶数,如果测试点位于多边形外部,则交点数将为奇数。

刚刚找到了一个解决方案。这非常简单,而且来自的代码已经实现了
a
b
。可以找到源代码的其他信息

const float EPSILON=0.001f;
bool iPointOnline(点线点A、点线点B、点点点)
{
浮点a=(linePointB.y-linePointA.y)/(linePointB.x-linePointB.x);
浮动b=线点a.y-a*线点a.x;
if(fabs(点y-(a*点x+b))
多边形是如何定义的?大概你没有顶点坐标;你是从多边形的图像开始工作的吗?没有图像。我有多边形的坐标和点的坐标。在大多数情况下,该点位于多边形的顶点上。我总是简单的多边形。检查你的术语(顶点)和问题的连贯性。“如果该点位于该多边形的顶点”vs“该点是否位于该多边形内部”vs“该点位于该多边形的顶点上”。这与文章中的问题有什么关系?该代码在各向同性方面相当差:它测试到直线的垂直距离,将为几乎垂直的线返回错误的结果,并为垂直线返回崩溃。
const float EPSILON = 0.001f;

bool IsPointOnLine(Point linePointA, Point linePointB, Point point) 
{
   float a = (linePointB.y - linePointA.y) / (linePointB.x - linePointB.x);
   float b = linePointA.y - a * linePointA.x;
   if ( fabs(point.y - (a*point.x+b)) < EPSILON)
   {
       return true;
   }

   return false;
}