您好我尝试了一个问题来检查两个矩形是否相交 如果矩形与x轴平行,我已编写代码
struct point
{
int x;
int y;
};
struct rect
{
struct point left;
struct point right;
};
//1 - intersection
// 0- no intersection
int rectintersectioncheck(struct rect r1,struct rect r2)
{
int x_check = (r1.left.x > r2.right.x || r2.left.x > r1.right.x);
int y_check = (r1.right.y > r2.left.y || r2.right.y > r1.left.y);
if(x_check && y_check )
{
return 0;
}
return 1;
}
它适用于这种情况,但在矩形不平行于x轴的情况下我很困惑algo 因为只有左上角,右边的底点被给予 请帮忙吗?
答案 0 :(得分:1)
首先澄清。如果p1和p2是矩形的左上角和右下角,则矩形必须与x轴(和y轴)平行。因此,只有一个矩形满足这些条件。如果矩形不与x轴平行,则底部不能同时成为右点。
由于我们讨论的是与x轴不完全平行的矩形,让我们放弃这个定义。我们来谈谈两个相对顶点是p1和p2的矩形(不一定是左上角和右下角)。
让p1和p2定义第一个矩形,p3和p4定义第二个矩形。
如果取对角为p1和p2的所有矩形的并集,则得到一个圆(以(p1 + p2)/ 2为中心,| p1-p2 |为直径)。
有三种情况:
答案 1 :(得分:0)
@ELKamina:你所讨论的圆形方法非常精细,但在圆形相交而矩形不相交的情况下,很难区分。
我记得他的想法,很高兴分享。
为什么我们不在特定情况下构造阵列中的矩形以找出它们是否相交。
eg. rect 1- points (1,3)(3,1)(6,4)(4,6) rect2 points- (4,0)(5,0)(5,1)(4,1)
array represntation array representation
6 [F F F F # F F F] 6 [F F F F F F F F]
5 [F F F # # # F F] 5 [F F F F F F F F]
4 [F F # # # # # F] 4 [F F F F F F F F]
3 [F # # # # # F F] 3 [F F F F F F F F]
2 [F F # # # F F F] 2 [F F F F F F F F]
1 [F F F # F F F F] 1 [F F F F # # F F]
0 [F F F F F F F F] 0 [F F F F # # F F]
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
在上述情况下,圆相交,但矩形不相交。
eg
g. rect 1- points (1,3)(3,1)(6,4)(4,6) rect2 points- (3,0)(4,0)(3,1)(4,1)
array represntation array representation
6 [F F F F # F F F] 6 [F F F F F F F F]
5 [F F F # # # F F] 5 [F F F F F F F F]
4 [F F # # # # # F] 4 [F F F F F F F F]
3 [F # # # # # F F] 3 [F F F F F F F F]
2 [F F # # # F F F] 2 [F F F F F F F F]
1 [F F F # F F F F] 1 [F F F # # F F F]
0 [F F F F F F F F] 0 [F F F # # F F F]
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
在上述情况(3,1)中的具有相同的值,因此可以发现它们相交 类似的表示可用于检查三角形是否相交。
答案 2 :(得分:-3)
我将勾勒出答案。
可以使用之前提出的链接执行旋转。
修改强>
忘记翻译 - 将一个矩形移动到0,0作为一个坐标。