Главная » 2012 » Март » 16 » Координаты пересечения двух отрезков Pascal/Delphi
09:33 Координаты пересечения двух отрезков Pascal/Delphi |
пересечение двух прямых на плоскости исходник функции возвращает координаты пересечения двух отрезков
Delphi/Pascal
function Subtract(AVec1, AVec2 : TPoint) : TPoint; begin Result.X := AVec1.X - AVec2.X; Result.Y := AVec1.Y - AVec2.Y; end;
function LinesCross(LineAP1, LineAP2, LineBP1, LineBP2 : TPoint) : boolean; Var diffLA, diffLB : TPoint; CompareA, CompareB : integer; begin Result := False; diffLA := Subtract(LineAP2, LineAP1); diffLB := Subtract(LineBP2, LineBP1); CompareA := diffLA.X*LineAP1.Y - diffLA.Y*LineAP1.X; CompareB := diffLB.X*LineBP1.Y - diffLB.Y*LineBP1.X; if ( ((diffLA.X*LineBP1.Y - diffLA.Y*LineBP1.X) < CompareA) xor ((diffLA.X*LineBP2.Y - diffLA.Y*LineBP2.X) < CompareA) ) and ( ((diffLB.X*LineAP1.Y - diffLB.Y*LineAP1.X) < CompareB) xor ((diffLB.X*LineAP2.Y - diffLB.Y*LineAP2.X) < CompareB) ) then Result := True; 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); 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;
Пример использования Delphi 7 исходник http://netsoftware.ucoz.ru/03_peresechenie_dvukh_prjamykh.rar
|
Просмотров: 3872 |
Добавил: NetSoftWare
| Теги: delphi, пересечение
| Рейтинг: 0.0/0 |
Всего комментариев: 1 | |
1
sergey
(19.12.2012 19:44)
0
Привет, долго рассматривал твой вариант и попробывал, вот это a.X:=10; a.y:=10; b.x:=50; b.y:=50;
c.X:=10; c.y:=10; d.x:=40; d.y:=50;
прога выдала что пересечений нет
|
|
|
|
|