с заданным краевым перечислением, например:
none, top, left, bottom, right,
Учитывая 2 прямоугольника, как я могу найти, какой край прямоугольника A пересекает этот прямоугольник B? Мне не нужно знать, какой край B касается края A, мне просто нужно знать, какой край A ударяет этот B.
Я нашел этот алгоритм, но он не возвращает конкретное ребро:
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, как создать функцию, которую нужно вызывать только один раз?
Спасибо