如何检查两个正方形的交点(非轴对齐)

时间:2015-02-05 09:01:32

标签: algorithm

我想检查两个非轴对齐的正方形的交点。我知道如何为轴对齐方块做这件事。我可以扩展相同的想法吗?

基本上我想在+ ve象限的x-y平面上通过高斯分布来分布正方形,但是两个正方形不应该相交,所以我必须移动正方形的原始中心。欢迎提出建议。

3 个答案:

答案 0 :(得分:0)

Separating axis theoremlink2)适用于凸多边形交叉的有效检查。对于正方形先决条件(法线等),计算变得特别简单。

答案 1 :(得分:0)

如果我是对的,你可以按照以下步骤进行:

  • 同时转动SaSb,以便Sa成为轴对齐;
  • 检查Sa'Sb';
  • 的边界框的重叠
  • 同时转动SaSb,以便Sb成为轴对齐;
  • 检查Sa"的边界框与Sb"的重叠。

如果配置没有重叠,则方块不相交。

enter image description here

在分析方面,无重叠条件将具有类似

的形式
C1 + C2 (|cos(t1+t2)| + |sin(t1+t2)|) < 2D Min(|cos(t1)|, (|sin(t1)|)

其中C1C2是边,D中心和t1之间的距离,t2是边和中心线之间的角度,交换1 / 2

答案 2 :(得分:0)

经过近4-5个小时的思考,我得到了一次点击。如果有人需要,只需分享。伪代码

输入:Square1和Square2

Bool(Sqaure1,square2)
  for vertex v0 to v3 of sqaure 1
    angle = 0;
    for vertex P0 to P3 of square 2 (In anticlockwise of clockwise way)
        angle = angle + angle(Pj,vi,P((j+1)%4)); 
    if(abs(angle-360) == 0)
        return true;

  return false;

IDEA:如果两个正方形相交,则另一个正方形内部或正方形的一个正方形的点与所有点的角度总和为360.因此,您可以通过交换参数调用函数两次,如果有人返回true,则回答为是。 (调用两次或检查角度和是否为0或360)