0

我试图找到一个公式来确定一条线是否与多边形相交。我试过了,但下面的代码不能正常工作。

bool Check_Collision(float x1,float y1, float x2, float y2)
{
        int j=MyPolyVector.size()-1;
        for (int i=0;i<MyPolyVector.size();i++)
        {
                float x3=MyPolyVector[i].X;
                float x4=MyPolyVector[j].X;
                float y3=MyPolyVector[i].Y;
                float y4=MyPolyVector[j].Y;

                float denom= ((y4-y3)*(x2-x1))-((x4-x3)*(y2-y1));
                float ua = (((x4-x3)*(y1-y3))-((y4-y3)*(x1-x3)))/denom;
                float ub = (((x2-x1)*(y1-y3))-((y2-y1)*(x1-x3)))/denom;
                j=i;

                if(ua >= 0.0f && ua <= 1.0f && ub >= 0.0f && ub <= 1.0f) return true;
        }
        return false;
}
4

3 回答 3

2

我认为这个链接对你来说可能很有趣,以获得诀窍: 多边形问题中的点

还有一个链接资源,用于 C 代码: 多边形中的点 - C 代码

这个问题主要在 OpenGL 上下文中处理,解决这个问题的主要思想是计算多边形和任何直线的交点,这会通过你的检查点。

您必须检查多少几何图形,一个点是否在多边形内?

PS:我刚刚发现这篇关于这个问题的帖子 :-) Stackoverflow - Point in Polygon

于 2012-04-07T12:14:40.480 回答
0

我可以建议你看看这本书,并在计算之前搜索线线交叉点 2D 和范围检查。

此外,您的代码需要除以零检查并进一步考虑倒数线尺寸和公差。

于 2012-04-07T12:28:54.120 回答
0

看起来您的线交叉点的方程式不正确。我认为这里列出了正确的方程式。

也就是说,解决这个问题的一个好方法是查看线是否与多边形上的任何线段相交。所以为了测试这个,计算线与多边形边缘的每条线的交点,如果这个点在多边形的段内,那么就有一个交点(看看这个点是否在定义的范围内段的端点)。(也许这就是您想要做的,但是由于您没有给出任何解释,因此很难说。)

于 2012-04-07T19:07:58.400 回答