c++ - 找到一个矩形与另一个矩形接触的边

标签 c++ algorithm

给定一个像这样的边缘枚举:

none, top, left, bottom, right,

给定 2 个矩形,我如何找到矩形 B 与矩形 A 的哪条边相交?我不需要知道 B 的哪条边碰到了 A 的边,我只需要知道 B 碰到了 A 的哪条边。

我找到了这个算法,但它没有返回特定的边:

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,我怎样才能创建一个只需要调用一次的函数?

谢谢

最佳答案

假设您已使用 edgeIntersection 确定已发生交叉点,则:

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;

关于c++ - 找到一个矩形与另一个矩形接触的边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895204/

相关文章:

c++ - 将 va_arg 传递给函数两次会得到相同的值

c++ - 在具有不同 CRT 的库中使用 shared_ptr<T>

java - Horner 的小数部分递归算法 - Java

algorithm - 你能用大 O 符号做加法/乘法吗?

c++ - 快速 n 为大 n 选择 k mod p?

c++ - 大输入(64 位)在计算 C++ 中的 64 位整数中的位数时给出意想不到的结果

声明结构时的 C++ 问题

C++ 从文件中获取数据以记住上次 session

c++ - Arduino 中的 Serial.print uint64_t

algorithm - Fenwick树与段树