Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-04-2006
blueicaro blueicaro is offline
Miembro
 
Registrado: abr 2005
Ubicación: España
Posts: 44
Poder: 0
blueicaro Va por buen camino
Cool Representar coordenadas 3D

Hola a todos, ando dando vueltas a una idea en la cabeza, pero no acabo de ver como hacerla funcionar en delphi, os la cuento.

Tengo coordenadas de puntos en 3D, en el formato (x,y,z), vamos un vector de toda la vida.

Bien quiero pintarlos en el espacio. La primera idea que pensé fue suponer que uno de los ejes está perpendicular a mi punto de vista y así omito su valor y lo puedo pintar en el plano del formulario. Por ejemplo si tengo (1,2,3) y (7,9,1) supongo que el eje X esta perpendicular a mi y así pintaria en el sobre el canvas (o un bitmap, etc, eso no me preocupa por ahora), un punto en (2,3) y otro en (9,1). Y listo

Pero como tengo una mente retorcida pensé en que estaria bien poder cambiar el punto de vista y poner otro eje diferente perpendicular. Y una vez llegados a esta idea pensé, y porque no permitir un rotación libre , osea que sea un eje perpendicular al punto de vista, sino poder rotar el punto de vista e ir cambiar el dibujo.

Así que estuve rascandome la cabeza tratando de recordar la geometria y la trigonometria para buscar la manera de representar las coordenas 3d en el plano del formulario y poder rotar el punto de vista.

¿Pero quizás haya algún código que ya lo haga y lo pueda adaptar a mi programa, o quizás un control, o alguna página donde pueda investigar?, ¿Alguien sabe algo?.

Gracias
/BlueIcaro
P.D. No sé si me expresé muy bien la idea
P.D1 Me entran dudas si he puesto la consulta en el foro adecuado, dudo entre este foro o el de gráficos. Pido disculpas a los moderadores si me he equivocado.
Responder Con Cita
  #2  
Antiguo 20-04-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
blueicaro:
Cita:
en el plano del formulario y poder rotar el punto de vista
Coordenas polares, aunq siendo en el espacio tambien podria ser
f(x,y)~F(rcos(Theta),rsen(Theta)), de hecho los limites en el espacio tambien se calculan con polares entonces la rotaciòn no deberia exceptuarse .
Este tema es muy bueno, ojala sea uno de los q pasan los 20 mensajes
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #3  
Antiguo 20-04-2006
Avatar de lpmlpm
lpmlpm lpmlpm is offline
Miembro
 
Registrado: ago 2005
Posts: 136
Poder: 19
lpmlpm Va por buen camino
Código Delphi [-]
{determina el Punto Tridimensional en el canvas bidimensional... }
function  TForm1.Get2DPoint(X, Y, Z: Extended): TPoint;
begin
  Result := Point(Round(XCen + Ratio * (X - Y * 1/sqrt(2))),
                  Round(YCen + Ratio * (-Z + y *1/sqrt(2))));
end;

Con esta funcion jugando con las variables internas puedes dibujar en un lienzo 2D coordenadas en 3D, cambiando el valor de las constantes y variables que se usan en la funcion se puede escalar, trasladar, y cambiar la perspectiva de manera un tanto dinámica... las variables XCen y YCen pueden ser las coordenadas del centro de tu formulario para que se dibuje a partir del centro....

Ojalá te sirva para comenzar...

http://cgarcia.blogspot.com
__________________
"Lo mejor de no saber hacer nada es que se tiene mucho tiempo libre."

Última edición por lpmlpm fecha: 20-04-2006 a las 05:20:36.
Responder Con Cita
  #4  
Antiguo 20-04-2006
blueicaro blueicaro is offline
Miembro
 
Registrado: abr 2005
Ubicación: España
Posts: 44
Poder: 0
blueicaro Va por buen camino
Question

Cita:
Empezado por OSKR
blueicaro:

Coordenas polares, aunq siendo en el espacio tambien podria ser
f(x,y)~F(rcos(Theta),rsen(Theta)), de hecho los limites en el espacio tambien se calculan con polares entonces la rotaciòn no deberia exceptuarse .
Este tema es muy bueno, ojala sea uno de los q pasan los 20 mensajes
Hola no entiendo a que te refieres, las coordenadas que tengo son Cartesianas, no polares, te refieres a convertirlas a polares?
/BlueIcaro
Responder Con Cita
  #5  
Antiguo 20-04-2006
blueicaro blueicaro is offline
Miembro
 
Registrado: abr 2005
Ubicación: España
Posts: 44
Poder: 0
blueicaro Va por buen camino
Lightbulb Probando

Hola he estado probando la función que puso en su respuesta lpmlpm, y acabo de ver como funciona.

He hecho un programita que pinta un recta en un componente TImage, la recta es "paralela al horizonte" ya que el punto de partida es 100,30 y el final 400,30

Como la función del compañero lpmlpm convierte coordenadas 3D en 2D, de partida he puesto 0 en Z, y salió la recta que os comento.

He experimentado con las variables XCen y YCen, y definen el desplazamiento del origen de coordenadas respecto al origen de TImage, que está arriba a la izquierda. Esto no tiene problema

Luego Ratio, lo puse a 1, porque creo que es un "Ratio" osea la relación.

Mi duda viene que luego he ido variando la coordenada Z del punto final de la recta, y si pongo valores positivos la recta pierde en lugar de dibujarse paralela como antes, ahora se representa diagonal hacia arriba si los valores son positivos.

Vamos que no tengo muy claro donde esta punto de vista, osea como está el sistema de coordenadas.

Aquí os dejo lo que he escrito para probar, os dejo la rutina donde se dibuja todo, es fácil reconstruir el resto del programa por si alguien quiere esperimentar, y si alguien lo quiere, que me lo pida.

Saludos
/BlueIcaro
Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
Var
 Punto1 ,
 Punto2 : Tpoint;
 Z : integer;
begin
 Xcen := StrToInt (Edit1.Text); // Desplazamiento X
 YCen := StrToInt (Edit2.Text); // Desplazamiento Y
 Z := StrToInt (Edit3.text); // Z del segundo Punto
 Punto1 := Get2DPoint (100,30,0);
 Punto2 := Get2DPoint (400,30,Z);

  Image1.Canvas.MoveTo(Punto1.X,Punto1.Y);
  Image1.Canvas.Lineto(Punto2.x,punto2.y);
end;
Responder Con Cita
  #6  
Antiguo 20-04-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
blueicaro:
Cita:
te refieres a convertirlas a polares?
Pos claro!! para rotar un punto tantos grados puedes hacerlo de esa manera, aunq si te sienta mejor la solucion de lpmlpm ....pues usa esa, hasta cierto punto implementa a lo q me refiero pero siempre rota en 45º ya q es el equivalente pal seno y el coseno de ese angulo
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Coordenadas en el PaintBox fabiof2000 Gráficos 2 27-09-2006 11:08:03
pasar coordenadas gps a coordenadas builder iaav1 C++ Builder 3 03-07-2006 20:59:02
Otra de coordenadas (DBGrid) elcigarra OOP 2 19-10-2005 14:32:39
como cambiar las coordenadas de un detailband tayra Impresión 0 30-09-2004 00:28:41
Linea de coordenadas en un TDBgrid selenacd Gráficos 1 26-05-2004 08:55:58


La franja horaria es GMT +2. Ahora son las 14:21:54.


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