Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2018
Miguel_ab Miguel_ab is offline
Registrado
 
Registrado: jun 2017
Posts: 6
Poder: 0
Miguel_ab Va por buen camino
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,
Responder Con Cita
  #2  
Antiguo 19-11-2018
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.203
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 21-11-2018
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 933
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Acá mas que una ayuda...
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
En 2 líneas DenisDiaz Impresión 7 09-01-2013 18:27:55
Realizar Join entre n1 líneas de una tabla y n2 líneas de otra tabla gluglu SQL 7 15-04-2011 21:33:19
Detectar USB mefixxto API de Windows 6 31-12-2010 21:14:27
Cruce de datos kemequemo Varios 1 19-01-2009 14:06:38
Lineas en TXT joanajj Varios 5 05-11-2004 22:09:06


La franja horaria es GMT +2. Ahora son las 20:05:05.


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
Copyright 1996-2007 Club Delphi