Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Detectar cruce de lineas (https://www.clubdelphi.com/foros/showthread.php?t=93569)

Miguel_ab 18-11-2018 13:10:27

Detectar cruce de lineas
 
buenas,

estoy realizando una aplicacion en la cual dibujamos 2 lineas necesito detectar el cruce entre ellas, y con ese cruce poder calcular mm, etc etc

Por favor, necesito ayuda como enfocar este problema.

Gracias de antemano.

Saludos,

escafandra 19-11-2018 00:39:21

La información dada es realmente insuficiente. Si tomamos líneas como rectas, para determinar el cruce en un plano solo hay que resolver el sistema de ecuaciones determinado por las ecuaciones de cada recta en el plano.

Saludos.

cloayza 21-11-2018 17:00:50

Acá mas que una ayuda... :D
Código Delphi [-]
...

  type TPunto = record
       x,y: Double;
  end;

  type TSolucion = record
     Interseccion: Boolean; {Indica si las rectas se Intersectan}
     X,Y: Double; {Punto de Interseccion}
   end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function LineIntersection(A, B, C, D:TPunto):TSolucion;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{
Fuente https://www.geeksforgeeks.org/progra...-of-two-lines/

Adaptado a Delphi por mi...
}

function TForm1.LineIntersection(A, B, C, D:TPunto):TSolucion;
var
   a1, b1, c1, a2, b2, c2, det:double;
begin
      a1 := B.y - A.y;
      b1 := A.x - B.x;
      c1 := a1*(A.x) + b1*(A.y);

      a2 := D.y - C.y;
      b2 := C.x - D.x;
      c2 := a2*(C.x)+ b2*(C.y);

      {Calculo del derminante}
      det := a1*b2 - a2*b1;

      {Si det=0, son rectas paralelas}
      Result.Interseccion:=(det <> 0);
      Result.x:=-1;
      Result.y:=-1;

      if Result.Interseccion then
      begin
           {Calcula el punto de intercepción}
           Result.x := (b2*c1 - b1*c2)/det;
           Result.y := (a1*c2 - a2*c1)/det;
      end;
end;

//****************************************************************************//
// Determines if two lines intersect.                                         //
//****************************************************************************//
procedure TForm1.Button1Click(Sender: TObject);
 var
     A, B, C, D:TPunto;
     solucion:TSolucion;
 begin
      {Recta 1}
      A.X:=1; A.Y:=2;
      B.X:=4; B.Y:=5;

      {Recta 2}
      C.X:=2; C.Y:=4;
      D.X:=5; D.Y:=4;

      Solucion:=LineIntersection(A, B, C, D);

      if not Solucion.Interseccion then
         Showmessage('Rectas paralelas :(')
      else
         ShowMessage(format('Las rectas de intersectan en el punto (%f,%f)',[Solucion.X, Solucion.Y]));
end;

end.


La franja horaria es GMT +2. Ahora son las 16:57:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi