|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Vadim Ajuev 2:5023/39.10 06 Jul 2001 01:19:29 To : Eugene Yadrikhinsky Subject : RE:Отрезки --------------------------------------------------------------------------------
EY> Два отрезка заданы координатами начала и конца. Как определить
EY> пересекаются ли они, и если пересекаются, то найти координаты точки
EY> пересечения?
EY>
EY> Вывел формулы для пересечения двух линейных функций, а вот с отрезками
EY> что-то не соображу...
Имеем отрезки АВ и СD. Hаправленные отрезки АВ ми CD задаются так:
P = A + r*(B - A) и
Q = C + s*(D - C)
Для пересекающихся отрезков, очевидно, имеет место равенство
A + r*(B - A) = C + s*(D - C),
или в координатной форме (*):
Ax + r*(Bx - Ax) = Cx + s*(Dx - Cx) и
Ay + r*(By - Ay) = Cy + s*(Dy - Cy)
Система имеет единственное решение:
(Ay - Cy)*(Dx - Cx) - (Ax - Cx)*(Dy - Cy)
r = -----------------------------------------
(Bx - Ax)*(Dy - Cy) - (By - Ay)*(Dx - Cx)
(Ay - Cy)*(Bx - Ax) - (Ax - Cx)*(By - Ay)
s = -----------------------------------------
(Bx - Ax)*(Dy - Cy) - (By - Ay)*(Dx - Cx)
... если, конечно, (Bx - Ax)*(Dy - Cy) != (By - Ay)*(Dx - Cx) (в противном
случае АВ и СD параллельны)
Если 0 <= r <= 1 и 0 <= s <= 1, то отрезки АВ и СD пересекаются. Точки
пересечения определяются из (*).
Если ничего не перепутал и ветер будет дуть в нужную сторону, то, может быть,
что-то будет работать (при соответствующем наборе данных) ;-))
With best regards [C++] [Galaxy Plus] [Quake]
Vadim Ajuev aka cre@tor [Scouderia Ferrari] [RTS]
* Origin: ... если не скончалась, она ещё жива. (с) Ч. Доджсон (2:5023/39.10)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/32903b44d9e1.html, оценка из 5, голосов 10
|