多边形线碰撞检测
Polygon-Line Collision Detection
我正试图找到一个公式来确定一条线是否与多边形相交。我已经尝试过了,但是下面的代码不能正常工作。
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;
}
我认为这个链接对你来说可能很有趣,可以获得专业知识:多边形中点问题
对于C代码,还有一个链接资源:多边形中的点-C代码
这个问题主要在OpenGL上下文中处理,解决这个问题的主要思想是计算多边形和任何直线的交点,这些直线穿过你的点进行检查。
你需要检查多少几何体,一个点是否在多边形内?
附言:我刚刚发现这篇关于这个问题的帖子:-)堆栈溢出-多边形中的点
我可以建议您看一看这本书,并在计算之前搜索线-线相交2D和范围检查。
此外,您的代码需要除以零检查,并需要进一步考虑倒数线尺寸和公差。
对于直线交点,您似乎有不正确的方程。我认为这里列出了正确的方程。
也就是说,解决这个问题的一个好方法是查看直线是否与多边形上的任何线段相交。因此,为了测试这一点,计算直线与多边形边缘每条直线的交点,如果该点在多边形的线段内,则存在交点(查看该点是否在线段端点定义的边界内)。(也许这就是你想要做的,但这有点难说,因为你没有给出解释。)
相关文章:
- 落砂模拟碰撞检测C++和SFML
- SFML 中的重力和碰撞检测
- 我的碰撞检测中的奇怪行为
- 如何为球形物体和三角形地形提供高效的碰撞检测和响应
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"
- 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?
- 在碰撞检测方面苦苦挣扎.如何正确检测碰撞?
- 三角形-三角形碰撞检测问题
- 不同类别之间的C SFML碰撞检测
- 使用D3DXVECTOR C 的碰撞检测,发生碰撞后该怎么办
- 当我发生碰撞检测时,矢量迭代器不兼容
- 如何使用灵活的碰撞库在两个点云或点云与机器人末端执行器模型之间进行碰撞检测
- 优化碰撞检测C
- 使用碰撞检测来增加SFML 2.4中的游戏分数的问题
- 使用OnComponentHit UE4 C++进行碰撞检测
- 体素世界中的碰撞检测
- 如何在 2D 碰撞检测中正确解析碰撞的位置?
- 多边形线碰撞检测
- c++二维多边形碰撞检测
- 任意大小凸多边形之间的碰撞检测算法