Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2008
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 18
JF Sebastian Va por buen camino
Busqueda de punto 3D (x,y,z) en una lista de puntos

Se trata de realizar (lo mas rapidamente posible) la busqueda de un punto en el espacio 3D dadas sus coordenadas x,y,z dentro de una lista de puntos 3D.
La busqueda secuencial es muy lenta.
Para una dimension la cosa parece facil con arboles binarios, pero para 3D???
Se podria aprovechar la funcionalidad de ordenacion de un TList para ello??
Responder Con Cita
  #2  
Antiguo 29-12-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Para estas cosas, yo siempre utilizo TStringList y la ordenación que ya posee.
Se trata de ir añadiendo los puntos a la TStringList (ordenada), a medida que los tienes.

La búsqueda en ese caso será dicotómica en lugar de secuencial.

Lo único que hay que tener en cuenta es que el formato con el que añadas los números debe ser "correcto" para que la búsqueda funcione. Me explico:

En lugar de añadir los números(puntos) así:
"1-34-2"
Añadirlos así:
"0001-0034-0002"
En tu caso, como se trata de puntos del espacio, y hay que tener en cuenta el signo, puedes hacer algo así:
"+0001/+0034/-0127"
Es decir se trata de estandarizar el formato, de forma que a la hora de buscar un número sepas exactamente lo que tienes que buscar.

Por ejemplo, si los has añadido con el último formato comentado, a la hora de buscar el punto (1,23,-4), deberás montar la cadena: "+0001,+0023,-0004" y buscarla.

No se si me explico (es que hoy estoy un poco "espesito"...)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 29-12-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que con un pequeño ejemplo se ve mejor lo que quiero explicar...
Archivos Adjuntos
Tipo de Archivo: zip Puntos TStringList.zip (2,9 KB, 7 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 29-12-2008
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 18
JF Sebastian Va por buen camino
Muy bueno neftali,
Una cosa mas:
Los numeros en principio son de coma flotante y supongo que habria que escribirlos en formato de exponente. Y luego habria que tener en cuenta que el StringList deberia devolver el numero de la lista no ordenada para poder acceder a el en la estructura de datos original (un TList del que cuelgan las clases de cada punto 3D) supongo que habria que anadir dicho numero detras de la coordenada z...
Habria que limitar tambien el numero de decimales para evitar problemas de redondeo. Y tambien seria interesante el caso de devolver no el punto exacto sino tambien el mas proximo, pero creo que esto se tendria que hacer con arboles de busqueda.
Funcionaria la ordenacion en el caso del formato de coma flotante?

Un saludo

Última edición por JF Sebastian fecha: 29-12-2008 a las 11:15:18.
Responder Con Cita
  #5  
Antiguo 29-12-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por JF Sebastian Ver Mensaje
Los numeros en principio son de coma flotante y supongo que habria que escribirlos en formato de exponente. Y luego habria que tener en cuenta que el StringList deberia devolver el numero de la lista no ordenada para poder acceder a el en la estructura de datos original (un TList del que cuelgan las clases de cada punto 3D) supongo que habria que anadir dicho numero detras de la coordenada z...
El formato original de los número da igual, siempre y cuando el formato que tú crees para adaptarlos sea estandard de forma que la ordenación funcione correctamente.
En cuanto a añadir más datos, como tú comentas, puede hacerse al final y si no recuerda que cada elemento del TStringList tiene un puntero en el que puedes almacenar más información (colgar objetos e incluso yo en alguna ocasión he utilizado ese puntero para almacenar directamente el entero correspondiente al índice de otra lista -esto tal vez sea lo más sencillo-).

Cita:
Empezado por JF Sebastian Ver Mensaje
Habria que limitar tambien el numero de decimales para evitar problemas de redondeo. Y tambien seria interesante el caso de devolver no el punto exacto sino tambien el mas proximo, pero creo que esto se tendria que hacer con arboles de busqueda.
Para el tema del más próximo con esta estructura sólamente está claro que no te va a servir. Lo que ya no tengo claro es si ese dato vale la pena almacenarlo o calcularlo en el momendo necesario.

Cita:
Empezado por JF Sebastian Ver Mensaje
Funcionaria la ordenacion en el caso del formato de coma flotante?
La ordenación funcionará siempre; Dependerá de cómo estés almacenando tú los datos de los puntos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Los puntos sobre las ies. marcoszorrilla La Taberna 14 23-04-2008 02:09:43
¿Mejor heredar de una Lista o mejor introducir la Lista en un campo? Jome OOP 8 24-11-2005 17:11:16
Puntos de restauración en WXP mlara Windows 2 26-11-2004 19:50:09
Puntos Carlex Varios 2 23-09-2004 14:44:09
Codigos de Puntos Roberto Impresión 1 04-06-2003 22:12:54


La franja horaria es GMT +2. Ahora son las 03:33:45.


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