查找边缘,一个矩形触及另一个矩形 [英] Find edge that a rectangle is touching on another rectangle

查看:133
本文介绍了查找边缘,一个矩形触及另一个矩形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定边枚举像这样的:

none, top, left, bottom, right,

由于2矩形,我怎么能找到矩形A的矩形B的交叉哪些优势?我并不需要知道其中B边缘打中甲的边缘,我只需要知道其中的一个使得b击中边。

Given 2 rectangles, how could I find which edge of rectangle A that rectangle B is intersecting? I do not need to know which edge of B hit an edge of A, I just need to know which edge of A that B hit.

我发现这个算法,但它并没有返回的具体优势:

I found this algorithm but it does not return the specific edge:

bool edgeIntersection( vector2f a, vector2f b, DOUBLEPOINT c, DOUBLEPOINT d )
{
    //one edge is a-b, the other is c-d
    vector2f bminusa;
    vector2f cminusa;
    vector2f cminusd;

    bminusa.x = b.x - a.x;
    bminusa.y = b.y - a.y;

    cminusa.x = c.point[0] - a.x;
    cminusa.y = c.point[1] - a.y;

    cminusd.x = c.point[0] - d.point[0];
    cminusd.y = c.point[1] - d.point[1];

    double det=determinant(bminusa,cminusd);
    double t=determinant(cminusa,cminusd)/det;
    double u=determinant(bminusa,cminusa)/det;
    if ((t<0)||(u<0)||(t>1)||(u>1))return false;
    return true;
}

我的上述算法检查每个边缘一个接一个,给定的 TopLeftA TopLeftB BottomRightA BottomRightB,我怎么可能让一个函数我只需要调用一次?

My above algorithm checks each edge one by one, given TopLeftA TopLeftB BottomRightA BottomRightB, how could I make a function I only need to call once?

感谢

推荐答案

假设你已经使用 edgeIntersection 来确定发生了交集,那么:

Assuming you've used edgeIntersection to determine that an intersection has occurred, then:

if (b.x < a.x) return left;
if (b.y < a.y) return top;
if (b.x+b.width > a.x+a.width) return right;
return bottom;

这篇关于查找边缘,一个矩形触及另一个矩形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆