пересечение луча и отрезка
Такая вот функция нужна...пересечение луча и отрезка, заданных двумя точками.. у луча просто начало и точка лежащая где то на луче, ну а отрезок соотвессно по двум концам... а у меня че та туго с геометрией никак не получается написать, мож у кого есть... в нете не нашел, если будет на С++ то ваще круто, но если че то и просто алгоритм сойдет.
Зарание спасибо.
Код:
формулы:
__ __ __
((y1-y0)*x1+(x0-x1)*y1)*x0
xA = x0 + --------------------------
__ __ __ __
y0*x1-y1*x0
__
y1
yA = y1 + -- * (xA - x1)
__
x1
__ __ __
((y1-y0)*x1+(x0-x1)*y1)*x0
xA = x0 + --------------------------
__ __ __ __
y0*x1-y1*x0
__
y1
yA = y1 + -- * (xA - x1)
__
x1
хотя тут много чего-то умножений... как видно, представлены точки начал отрезков и их вектора. ошибка деления на ноль выйдет тогда, когда оба отрезка будут параллельны (вектора y0 = y1 = 0 или х0 = х1 = 0), а так, для большей точности можно выразить yA с учетом xA, подставив xA в формулу yA
вот:
Код:
1) __ __ __
Fnum = ((y1-y0)*x1+(x0-x1)*y1)*x0
__ __ __ __
Fden = y0*x1-y1*x0
2) тогда:
__
((x0-x1)*Fden+Fnum)*y1
yA = y1 + ----------------------
__
Fden*x1
Fnum = ((y1-y0)*x1+(x0-x1)*y1)*x0
__ __ __ __
Fden = y0*x1-y1*x0
2) тогда:
__
((x0-x1)*Fden+Fnum)*y1
yA = y1 + ----------------------
__
Fden*x1
вот тут-то и стоит обратить внимание на вектор x1. следует, по видимому, перед вычислениями отбирать тот отрезок, у кторого этот параметр не равен нулю. если формулу выразить явно, получится, по моему, 7, а не 8 умножений.