Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-06-2014
RSC9421 RSC9421 is offline
Registrado
NULL
 
Registrado: jun 2014
Posts: 6
Poder: 0
RSC9421 Va por buen camino
Plano cartesiano

Buenas, soy nuevo en el foro(ya lei lo correspondiente) (esa fue toda mi presentacion)
vengo de utilizar visual basic 6 pero no me gusta mucho, y tengo un problema, quiero dibujar un plano cartesiano en un timage y dibujar diferentes posiciones para la misma linea, el problema es que el timage como todas las cosas empieza a contar desde donde comienza a dibujarse el image(superior izquierda) y yo quiero dibujar las lineas desde un punto (x,y) que sera el centro del timage y empezar a dibujar las lineas tomando como referencia a la derecha valores positivos y a la izquiera valores negativos para el eje x como estamos acostumbrados, estoy usando delphi7(se que puedo dibujar las lineas con canvas y el moveto(x1,y1) y lineto(x2,y2) similar a lo que venia haciendo)
la idea principal es hacer cinematica inversa con 2 articulaciones, es decir, dada la punta de un brazo dibujada con 2 lineas saber los angulos de la linea 1 y la linea 2, lo hice en visual basic 6 pero es muy limitado y si sigo haciendo las cosas que quiero hacer me voy a ahogar en un vaso de agua
saludos
Responder Con Cita
  #2  
Antiguo 24-06-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola RSC9421, bienvenido a Club Delphi

Como es costumbre con los que se inician, te invitamos a leer nuestra guía de estilo.

Si no interpreté mal tu consulta, una opción puede ser:
Código Delphi [-]
function GetRectCoord(const Img: TImage; const x,y: Integer): TPoint;
begin
  Result.X:= (Img.Width - Img.Canvas.Pen.Width) div 2;
  Result.Y:= (Img.Height - Img.Canvas.Pen.Width) div 2;
  if x < Result.X then
    Inc(Result.X, x)
  else
    Dec(Result.X, x);
  if y < Result.Y then
    Dec(Result.Y, y)
  else
    Inc(Result.Y, y);
end;

Ejemplo de uso:
Código Delphi [-]
var
  P1,P2: TPoint;
begin
  P1:= GetRectCoord(Image1,-60,-60);
  P2:= GetRectCoord(Image1,25,25);
  Image1.Canvas.MoveTo(P1.X, P1.Y);
  Image1.Canvas.LineTo(P2.X, P2.Y);
  ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 24-06-2014
RSC9421 RSC9421 is offline
Registrado
NULL
 
Registrado: jun 2014
Posts: 6
Poder: 0
RSC9421 Va por buen camino
muy bueno

gracias, me sirvio muchisimo y pude entender el codigo el prog ya esta funcionando, pero tengo otro problema, como hago para borrar la linea que acabo de crear cuando se crea otra linea
gracias por la respuesta, intentare solucionarlo
Responder Con Cita
  #4  
Antiguo 25-06-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por RSC9421 Ver Mensaje
...
como hago para borrar la linea que acabo de crear cuando se crea otra linea
...
Hola RSC9421.

Revisa en este hilo: Cómo borrar y cambiar el color de una linea

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 26-06-2014
RSC9421 RSC9421 is offline
Registrado
NULL
 
Registrado: jun 2014
Posts: 6
Poder: 0
RSC9421 Va por buen camino
gracias

gracias, tengo una duda(perdon por ser tan pesado ^^ ) hay alguna forma de crear una sola linea y manejar solamente esa linea?seria mas facil que estar dibujando y borrando la linea todo el tiempo, seria como hacer un reloj analogico, el problema es que el reloj sabe cuando cuando dibujar y cuando borrar(definido por un tiempo), en el caso que estoy haciendo es dibujar y borrar la linea cuando presiono una tecla,
el procedimiento para un reloj seria
dibujar la linea negra
esperar
dibujar la linea transparente
el tema es que no puedo definir el (esperar) cuando este presionando una tecla, por eso, si podria crear una sola linea1 y manejar a gusto esa linea1 seria lo ideal
saludos
Responder Con Cita
  #6  
Antiguo 27-06-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola RSC9421.

No veo la dificultad en borrar y dibujar una linea ante la presión de una tecla como por ejemplo hago en este código:
Código Delphi [-]
...
implementation

const
  INCR = PI / 15;

var
  Center: TPoint;
  Posic : TPoint;
  Radio : Integer;
  Cont  : Single;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Canvas.Pen.Style:= psSolid;
  Canvas.Pen.Color:= clBlack;
  Center:= Point(Width div 2, Height div 2);
  Posic:= Point(0, 0);
  Radio:= 100;
  Cont:= PI;
  KeyPreview:= True;
end;

procedure DrawLine(CV: TCanvas; const Ini,Fin: TPoint; const aColor: TColor);
begin
  CV.Pen.Color:= aColor;
  CV.MoveTo(Ini.X,Ini.Y);
  CV.LineTo(Fin.X, Fin.Y);
  CV.Ellipse(Fin.X-5,Fin.Y-5,Fin.X+5,Fin.Y+5);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  DrawLine(Canvas, Center, Posic, clBtnFace);
  Posic.X:= Center.X + Trunc(Radio * sin(Cont));
  Posic.Y:= Center.Y + Trunc(Radio * cos(Cont));
  DrawLine(Canvas, Center, Posic, clBlack);
  if Key = VK_RIGHT then
    Cont:= Cont - INCR
  else if Key = VK_LEFT then
    Cont:= Cont + INCR;
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-06-2014 a las 16:06:36.
Responder Con Cita
  #7  
Antiguo 30-06-2014
RSC9421 RSC9421 is offline
Registrado
NULL
 
Registrado: jun 2014
Posts: 6
Poder: 0
RSC9421 Va por buen camino
gracias

gracias, ya lo pude solucionar
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
Grafica Del Plano Cartesiano jose_2057111 Gráficos 5 02-11-2015 09:42:53
Archivo PLANO jorge_mosquera Varios 1 26-02-2007 23:20:37
Texto plano a RTF FunBit Varios 3 19-09-2006 08:48:37
Plano de una ciudad Petolansa Varios 0 07-06-2006 01:12:54
archivo plano nazly Varios 5 28-11-2005 20:26:25


La franja horaria es GMT +2. Ahora son las 18:25:00.


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