Помощь - Поиск - Пользователи - Календарь
Полная версия: вопрос по алгоритму
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
bigglewood
две функции. при вызове LineIntersect находит координаты перечесения двух линий. работает правильно. только не могу понять каким образом.имею ввиду математически. может кто подскажет где есть теория по такому способу поиска пересечения? или коментарии какиенибуть напишет...спасибо.


function Subtract(AVec1, AVec2 : TPoint) : TPoint;
begin
Result.X := AVec1.X - AVec2.X;
Result.Y := AVec1.Y - AVec2.Y;
end;

function LineIntersect(LineAP1, LineAP2, LineBP1, LineBP2 : TPoint) : TPointFloat;
Var
LDetLineA, LDetLineB, LDetDivInv : Real;
LDiffLA, LDiffLB : TPoint;
begin
LDetLineA := LineAP1.X*LineAP2.Y - LineAP1.Y*LineAP2.X;
LDetLineB := LineBP1.X*LineBP2.Y - LineBP1.Y*LineBP2.X;
LDiffLA := Subtract(LineAP1, LineAP2);
LDiffLB := Subtract(LineBP1, LineBP2);
if (LDiffLA.X*LDiffLB.Y) - (LDiffLA.Y*LDiffLB.X) <> 0 then begin
LDetDivInv := 1 / ((LDiffLA.X*LDiffLB.Y) - (LDiffLA.Y*LDiffLB.X));
Result.X := ((LDetLineA*LDiffLB.X) - (LDiffLA.X*LDetLineB)) * LDetDivInv;
Result.Y := ((LDetLineA*LDiffLB.Y) - (LDiffLA.Y*LDetLineB)) * LDetDivInv;
end;
end;
Michael_Rybak
обычная система уравнений решается. в поиск. как раз недавно объясняли.
bigglewood
именно такой алгоритм не удается найти.
Michael_Rybak
вместо того, чтобы искать "такой" алгоритм, убери процедуру Subtract, и замени все эти умные названия на неумные. какая разница, что там отнимают векторы и ищут детерминанты, если все равно в результате решается точно та же система 2х2?

Добавлено через 1 мин.
но, конечно, если тебе страшно важно знать, что тут делается, могу почитать и рассказать smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.