Приветствую Вас Гость | RSS

Delphi заготовки

Пятница, 10.05.2024, 21:37
Главная » 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


Просмотров: 3825 | Добавил: NetSoftWare | Теги: delphi, пересечение | Рейтинг: 0.0/0
Всего комментариев: 1
1 sergey  
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;

прога выдала что пересечений нет

Имя *:
Email *:
Код *: