如何检查两个旋转的矩形之间的交点? [英] How to check intersection between 2 rotated rectangles?
本文介绍了如何检查两个旋转的矩形之间的交点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有人可以解释如何检查一个旋转的矩形是否与另一个矩形相交吗?
Can someone explain how to check if one rotated rectangle intersect other rectangle?
推荐答案
- 对于两个多边形中的每个边,请检查是否可以将其用作分隔线.如果是这样,那么您就完成了:没有路口.
- 如果未找到分隔线,则说明您有一个相交点.
/// Checks if the two polygons are intersecting.
bool IsPolygonsIntersecting(Polygon a, Polygon b)
{
foreach (var polygon in new[] { a, b })
{
for (int i1 = 0; i1 < polygon.Points.Count; i1++)
{
int i2 = (i1 + 1) % polygon.Points.Count;
var p1 = polygon.Points[i1];
var p2 = polygon.Points[i2];
var normal = new Point(p2.Y - p1.Y, p1.X - p2.X);
double? minA = null, maxA = null;
foreach (var p in a.Points)
{
var projected = normal.X * p.X + normal.Y * p.Y;
if (minA == null || projected < minA)
minA = projected;
if (maxA == null || projected > maxA)
maxA = projected;
}
double? minB = null, maxB = null;
foreach (var p in b.Points)
{
var projected = normal.X * p.X + normal.Y * p.Y;
if (minB == null || projected < minB)
minB = projected;
if (maxB == null || projected > maxB)
maxB = projected;
}
if (maxA < minB || maxB < minA)
return false;
}
}
return true;
}
有关更多信息,请参见本文: 2D多边形碰撞检测-代码项目
For more information, see this article: 2D Polygon Collision Detection - Code Project
注意::该算法仅适用于以顺时针或逆时针顺序指定的凸多边形.
NB: The algorithm only works for convex polygons, specified in either clockwise, or counterclockwise order.
这篇关于如何检查两个旋转的矩形之间的交点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文