две функции. при вызове 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;
обычная система уравнений решается. в поиск. как раз недавно объясняли.
именно такой алгоритм не удается найти.
вместо того, чтобы искать "такой" алгоритм, убери процедуру Subtract, и замени все эти умные названия на неумные. какая разница, что там отнимают векторы и ищут детерминанты, если все равно в результате решается точно та же система 2х2?
Добавлено через 1 мин.
но, конечно, если тебе страшно важно знать, что тут делается, могу почитать и рассказать