Я просматриваю несколько функций, предоставляемых в классе геометрии, и я нашел эту очень плохо прокомментированную функцию, которая, по-видимому, проверяет, есть ли пересечение между двумя строками. Может кто-нибудь объяснить мне, как это работает?Кто-то, пожалуйста, объясните эту функцию проверки пересечения
inline bool LineIntersection2D(Vector2D A,
Vector2D B,
Vector2D C,
Vector2D D)
{
double rTop = (A.y-C.y)*(D.x-C.x)-(A.x-C.x)*(D.y-C.y);
double sTop = (A.y-C.y)*(B.x-A.x)-(A.x-C.x)*(B.y-A.y);
double Bot = (B.x-A.x)*(D.y-C.y)-(B.y-A.y)*(D.x-C.x);
if (Bot == 0)//parallel
{
return false;
}
double invBot = 1.0/Bot;
double r = rTop * invBot;
double s = sTop * invBot;
if((r > 0) && (r < 1) && (s > 0) && (s < 1))
{
//lines intersect
return true;
}
//lines do not intersect
return false;
}
Из того, что я собрал, А и В являются две точки первой линии и С и D являются две точки второго. После этого я полностью потерялся. Заранее спасибо!
Вы понимаете уравнение пересечения линий в целом? Не эта функция, а математическое уравнение. – Carcigenicate
Я мог бы выполнить поиск google, если нужно. –
Я бы сказал, шаг 1, чтобы вы поняли уравнение, отличное от кода. Затем снова взгляните на код и посмотрите, не имеет ли для вас никакого смысла. – Carcigenicate