PDA

Ver la Versión Completa : Ayuda con proyecto cientifico


oregon
30-05-2007, 14:52:51
Saludos,

No se si debo poner aquí este post,ole correspondea otra sección, pero creo que es donde menos mal está.

Soy geológo y profesor de universidad y estoy trabajando en el desarrollo de un programa con Turbo Delphi (la version gratuita) para el analisis gráfico y matemático de lineas de costa. El caso que por falta de tiempo y de conocimientos de programación (no sé que razón pesa más), me veo abocado a pedir ayuda en el foro.

ya tengo un modelo inicial de como deberíaser el programa, pero le queda mucho mucho por hacer. Y necesitaría a alguien que se animara a continuar el programa donde lo tengo atascado. os cuento de qué va.

Se trata de poder abrir una imagen de satélite y pintar sobre ella una serie de puntos marcando la localización de una playa. A continuación, el programa debería poder establecer la curva matemática más apropiada para representar esa playa basándose en los puntos que hemos pintado encima. Como creo que esto es complicado, una forma más sencilla es permitir al usuario el poder seleccionar el tipo de curva que desea calcular con esos puntos: una linea, una curva exponencial, logarítmica e incluso una espiral logarítmica. Esta es la idea y la base del programa, pero luego se conplica hasta el infinito, con el dibujo de la curva obtenida, el poder abrir y guardar proyectos de imágenes, hacer zooms, mover las imágenes, exportar informes,... bueno, tengo un monton de ideas a desarrollar.

Por ello necesitaría a alguien que se animara a programar todo esto por mi, con mi ayuda, por supuesto, hasta donde llegan mis conocimientos. Puede sonar un poco dificil, pero creo que en realizad la dificultad no es tanta como mis escasos conocimientos de programación.

No puedo ofrecer dinero por la ayuda, porque esta idea la desarrollo sin un proyecto que lo financie. Pero la idea es, una vez realizado el programa, aplicarlo a algunas playas y publicar la descripción del programa y unos resultados previos en un artículo de una revista científica internacional, en el que también constaría como autor del artículo y el programa la persona que me ayude, claro.

Después de toda esta charla, no se si quedará algún alma con ganas de meterse en berenjenales, pero si alquien quiere algo más de información, le puedo mandar un ejecutable con el estado actual del proyecto (por llamarlo de alguna manera). Podeis mandarme un mensaje privado con las preguntas que haya o con la información extra que necesiteis.

Bueno, en cualquier caso, muchas gracias por haber llegado hasta esta linea del post.
Espero a algún/a valiente. ¿Alguien se anima?

karlaoax
30-05-2007, 16:28:41
Saludos,
Se trata de poder abrir una imagen de satélite y pintar sobre ella una serie de puntos marcando la localización de una playa. A continuación, el programa debería poder establecer la curva matemática más apropiada para representar esa playa basándose en los puntos que hemos pintado encima. Como creo que esto es complicado, una forma más sencilla es permitir al usuario el poder seleccionar el tipo de curva que desea calcular con esos puntos: una linea, una curva exponencial, logarítmica e incluso una espiral logarítmica. Esta es la idea y la base del programa, pero luego se conplica hasta el infinito, con el dibujo de la curva obtenida, el poder abrir y guardar proyectos de imágenes, hacer zooms, mover las imágenes, exportar informes,... bueno, tengo un monton de ideas a desarrollar.

Hola este proyecto suena muy interesante,........... Pero por las descripciones que estas mencionando acerca de lo que debe hacer, yo optaria por usar MACROMEDIA FLASH, ya que tiene sus Modulos de Programacion SCRIPTS, y seria mas facil controlar los zooms, mover imagenes (DRAG AND DROP), abris y guardar proyectos. Yo optaria por MAcromedia Flash o quiza Director.... bueno es mi punto de vista.

Aunque podriamos hacer una prueba utilizando las API de win con el fabuloso Delphi :p

Si tienen otra sugerencia, mencionenla, Usar Delphi o Flash para este proyector?

Karla ;)

oregon
30-05-2007, 16:39:48
Gracias Karla,

La verdad es que cuando comencé con esta idea, se me ocurrió aplicar lo que conocía: Delphi. Además, de Flash y director no tengo ni idea, y encima no tengo licencia de esos programas. Pero si tu crees que es una buena opción, yo me dejo aconsejar por los expertos que sois vosotros.

Muchas gracias de nuevo por el comentario Karla.

oregon
30-05-2007, 16:47:20
Una cosilla más...

se que este tipo de cosas se podrían hacer mejor con un Sistema de Información Geográfica (por ejemplo con ArcGIS) programando un script o algo así. Pero por varias razones no me acaba de interesar: 1) tampoco tengo ni idea de programar perl, python o visualbasic; 2) me interesa que el programa sea independiente de cualquier software, y más si es de pago como ArcGIS; 3) El programa debe ser sencillo, manejable, que ocupe poco, y que no requiera de tener otros softwares instalado, porque a quien está dirigido este software (estudiantes e investigadores) no tienen que tener nada especial instalado en sus equipos, ni saber manejar complejos programas como los SIG.

Pero también se que hay herramientas que permites crear un pequeño SIG en las aplicaciones Delphi, lo que me parece perfecto, pero yo no las tengo ni se manejarlas.

Solo eran algunas pistas más sobre el proyecto,
Ciao!

karlaoax
30-05-2007, 16:51:31
Si, para mi es mas facil hacer lo que necesitas por medio de Macromedia Flash, yo tengo programas que he realizado para DRAG AND Drop(Arrastrar componentes), ejemplos con zoom, etc.

Y extra: "Se pueden poner tus archivos SWF en delphi", solo que sigo experimentando con estas opciones, y he visto que funcionan sin problemas. Seria cuestino de analizar y ver las soluciones mas apropiadas. :p

oregon
30-05-2007, 16:58:09
Si, es una opción, pero no tengo ni idea de lo que me hablas, perdona. Es que de flash no tengo ni idea. Si quieres te puedo mandar el ejecutable que que tengo para queveasun poco de que va el asunto, auque está muy al principio. Para que experimentes, más que naday veas si es posible.

Neftali [Germán.Estévez]
30-05-2007, 17:03:28
Yo no desecharía del todo la opción de Delphi...:D
Échale un vistazo a éste componente. (http://www.delphiarea.com/products/simplegraph/) Se llama TSimpleGraph. La licencia es gratuíta y se puede descargar el código fuente.
He trabajado bastante con éste componente y lo conozco bastante bien. Creo que te puede ser útil, ya que implementa la mayoría de opciones que comentas para trabajar con el mapa; Zoom, pan, selección, guardar, recuperar, imprimir,...
Básicamente es un componente de dibujo; Es decir un área sobre el que puedes dibujar elementos, seleccionarlos, moverlos,...

No es muy difícil modificarlo para que muestre de fondo una imagen (eso es de las primeras cosas que tuve que hacer y te puedo decir cómo se hace); El dibujo de elemntos tipo "Punto" creo que ya lo tienes resuelto, y el tema de las curvas (que es lo más complejo -creo-) es lo que tendrías que implementar.

karlaoax
30-05-2007, 17:08:25
La ventaja que vas a presentar en Macromedia Flash es que lo podras ver en cualquier browser de internet, ademas es un archivo SWF que baja rapido y es practico. Lo podras subir si quieres a una pagina web y hacer que tus clientes lo puedan visualizar.

Si lo que necesitas es tenerlo solo en una Red tipo Cliente/Servidor, pues si, Delphi es la solucion, yo tengo esta idea, Diseñar todo el proyecto en Flash y ejecutarlo en Delphi, es cuestion de hacer muchas pruebas.

Yo estoy empezando a trabajar de esta forma Delphi-Flash-MySQL, y de las pruebas q he hecho funcionan bien, auqnue todavia me hace falta experiencia :p soy muy joven :p Pero es un bun reto :cool:

oregon
30-05-2007, 17:10:59
Gracias neftalí,

Sí, la parte de puntos la tengo resuelta, aunque no me acaba de convencer. Además aún tengo el problema de sacar las coordenadas de los puntos creados.

Y el componente que me mencionas tiene buena pinta, pero el problema es que en el Turbo Delpbi grautito no se pueden instalar componentes externos. Y cuando he intentado hacer algo con el código fuente, me encuentro con muchos problemas.

Por eso he decidido pedir socorro a los expertos y dejar trabajar a los profesionales. Pero supongo que si no se anima nadie, tendré que esperar a algún momento en el que tengo algo de tiempo libre para poder dedicarle a pegarme de nuevo con todo esto.

En cualquier caso, muchas gracias.

karlaoax
30-05-2007, 17:11:51
Yo no desecharía del todo la opción de Delphi...:D
Échale un vistazo a éste componente. (http://www.delphiarea.com/products/simplegraph/) Se llama TSimpleGraph. La licencia es gratuíta y se puede descargar el código fuente.

Nunca habia oido de este componente, voy a hecharle un vistazo para ver como funciona :cool:

karlaoax
30-05-2007, 17:15:08
Y el componente que me mencionas tiene buena pinta, pero el problema es que en el Turbo Delpbi grautito no se pueden instalar componentes externos. Y cuando he intentado hacer algo con el código fuente, me encuentro con muchos problemas.

Por eso he decidido pedir socorro a los expertos y dejar trabajar a los profesionales. Pero supongo que si no se anima nadie, tendré que esperar a algún momento en el que tengo algo de tiempo libre para poder dedicarle a pegarme de nuevo con todo esto. En cualquier caso, muchas gracias.

Venga intenta con Flash, no es dificil de utilizar googlea un poco y documenta la informacion, Te aseguro, es muy entretenido estar diseñando en este software

oregon
30-05-2007, 17:20:00
Gracias Karla por los ánimos, pero no es faltade ganas, si no de tiempo. Te aseguro que estoy hasta arribade trabajo con los proyectos que tengo que acabar, las clases que preparar, las reuniones de trabajo,...

Además tengo pendiente meterme a aprender Flash para diseñar material didáctico para mis clases, pero me hacen falta otras 24 horas cada día para poder hacer todo lo que debo y lo queme gustaría... así que solo tengo tiempo para la mitad de las cosas. Es una pena.

Pero muchas gracias de todas formas karla.
Un saludo,

karlaoax
30-05-2007, 17:26:45
Vale, insisto, con la documentacion que mencionas de tu proyecto, yo opto por Flash. Yo tambien tengo mucho trabajo, pero es cool hacer pruebas y aprender mas cosas, en este caso el proyecto que necesitas. :D

Delphius
30-05-2007, 17:37:37
Bueno, separemos las cosas: una cosa es el comportamiento visual y la otra es la lógica.

Mucho se viene hablando sobre la interfaz, pero del aspecto lógico (que en definitiva es lo que importa) poco o nada se dijo.

Mi papá es agrimensor y trabaja mucho con imagenes satelitales... el me podría indicar un poco como es eso de obtener una curva en base a los puntos.

Según tu descripción del problema se necesita de unos puntos (Ingresados a mano).
Y Con dichos puntos se traza una curva estimativa que pase por dichos puntos.

Si ese es el caso, y si estoy entendiendo bien... y de lo que recuerdo de las clases de Cálculo Numérico, se puede predecir una recta en base a dos, tres, o más puntos de una curva no conocida. El método se llama Interpolación y creo que su autor es Lagrange ¿O me equivoco?

Yo me acuerdo de Simpson, Trapecio, Euler, TrapecioIterativo... poco me acuerdo de Calculo Numérico. Si me puedes refrescar la memoria... en una de esas te puedo ser de ayuda.

¿Podrías explicar un poco cuales son las fórmulas o desarrollo matemático?
El problema a resolver proviene de los siguientes puntos:
1. Traducir puntos de la imagen a coordenadas.
2. Predecir la curva que pase por dichos puntos.
3. Representar los puntos intermedios en la imagen (Traducir coordenadas en el punto de la imagen)

Concentremos el esfuerzo en la lógica.
Veamos primero como representar los puntos. Lo lógico sería emplear el TPointer. Ya que contiene los valores X e Y. Y usar un TObjectList para tener el listado de los puntos.

La traducción de puntos [X,Y] de la imagen a las coordenadas sería de menos. El grueso del aplicativo está en la función de la curva.

Saludos,

oregon
30-05-2007, 18:21:04
Hola Delphius,

Sí, es verdad que de momento solo se ha hablado de la parte visual, y poco de la gráfica. auque supongo que depediendo delprograma que se use para laparte gráfica el lenguaje de programación será distinto par ala parte lógica.

Te explico por encima la parte teórica. Se trata de, usando la imagen de satélite, ir colocando a mano puntos que representen lalinea de costa. Esos puntos tendrán unas coordenadas relativas a la imagen. Una de las opciones delprograma podría ser el dar coordenadas a las esquinas o las de unaesquina y la resolución por pixel, para poder trabajar en coordenadas métricas (UTM, por ejemplo). Pero eso, como dices es un problema menor,ya que se trata de sumas, restas, multiplicaciones y divisiones de la imagen. De todas formas, en teoría la costa se comporta como un fractal, por lo que en principio, y digo en principio, daría un poco igual la escala real. Aunque en el fondo si que me interesa.
Una vez que se tienen las coordenadas de los puntos (relativas a la imagen o ya en UTM), la idea es calcular curvas de regresión, al igual que lo puede hacer excell o cualquier calculadora científica. Buscar una recta, una curva exponencial o logarítmica que más se acerca a los puntos dibujados. Como bien dices hay multitud de maneras de hacer esto, decenas de algoritmos y de aproximaciones matemáticas. Yo de momento había empezado por las espirales logarítmicas, que son algo más complejas porque requieren, además de localizar unposible foco de la espiral, un cálculo iterativo, la transformación de coordenadas restangulares a coordenadas polares,... Así que no te se decir que algoritmo usar porque tampoco me había metido mucho en el tema por el momento hasta haber resuelto alguno de los problemas visuales previos.
El resultado del análisis es una ecuación. Los parámetros dependerán del tipo de recta o curva seleccionada, pero al final es una ecuación. Con esa ecuaci´n se pueden pintar una curva teórica dela curva que,representada en elmismo espacio que lospuntos usados, te permite visualmente saber como de cerca o lejos quedan los puntos de la curva teórica. Para calcular matemáticamente el error, también hay muchas funciones matemáticas, comopuedes veren excell.

Creo que te he solucionado poco, pero supongo que el problema habría que ir resolviendolo poco a poco, en función del tipo defunción a emplear. Además tampoco pretendo que el programa sea la soluciónfinal para el calculo universal de interpolación de curvas, que paraesoya existen programas matemáticos muy evolucionados que lo hacen mil veces mejor. Esto debe ser una cosa sencilla pero efectiva y útil. Si de los mil algoritmos posible, solo se usan 5, pero de manera razonada y con buenos resultados, pues el objetivo estará cumplido.

oregon
30-05-2007, 18:40:59
Si karla, si tienes razón. Lo divertido de esto es aprender. Por eso me dedico a la ciencia, y en concreto a las ciencias experimentales por que no me canso de aprender, experimentar y buscarnuevos retos, pero es que en este momento no tengo tiempo material. Apenas duermo 4 o 5 horas al día incluidos los fines de semana, y no tengo tiempo para meterme en más líos.
Otras cosas que intento programar las he dejado aparcadas para dentro de un par de años que espero estar más desahogado, pero este proyecto me interesa especialmente, y en vista de que no tengo más tiempo, por eso he recurrido a la comunidad en busca de alguien que se anime a meterse en estas cosas. No con ello digo que tengan más tiempo, que sean unos vagos y no trabajen sino que alguien que tenga más tiempo y le apetezca hacer la parte de programación, me ayude mientras yo me dedico al diseño y los conceptos teóricos del asunto.

Pero tomo nota de tu recomendación. Muchas gracias Karla.

Neftali [Germán.Estévez]
30-05-2007, 19:00:53
He realizado un pequeño ejemplo a fin de que veas las posibilidades del componente que os he comentado. Es un ejecutable y añade un par de imágenes. El código es básicamente el de crear los objetos y poco más. Lo demás está ya hecho.

No se si puede ayudar a clarificar lo que necesitas.

Link descarga (http://neftali.clubdelphi.com/temp/Test%20imagenes%20SimpleGraph.zip).

Neftali [Germán.Estévez]
30-05-2007, 19:03:57
Comentar que esto es sólo referente a la parte visual. De la parte matemática sabéis más cualquiera de vosotros que yo, que "estoy pez" en eso. He añadido también un par de imágenes para probar (gentileza de Google -una de cerca de mi pueblo-) y otras de cerca de Cancun; Ambos sitios con playas de las mejores que he visto... ;)

oregon
30-05-2007, 19:31:50
Gracias neftalí.
Si, algo así esta perfecto. De echo, es algo parecido a lo que ya tenía preparado y que he ido haciendo gracias a la ayuda del foro.
El siguiente paso es obtener las coordenadas de esos puntos (en plan simple vale con que sean las coordenadas respecto a la imagen) y obtener un listado, de tal manera que luego se pueda usar esa lista para hacer que el programa calcule rectas, curvas, espirales o lo que sea.

La verdad es que el componente ese tiene muy buena pinta. Yo encontré en algún sitio otra cosa que también me gustó, y es que dibujaba lineas entre los puntos, al estilo arcGIS, de tal forma que era facil ver cuanto se estaba acercando uno a la realidad de la curva, y si era necesario meter más puntos entre medias. Pero esto está fantástico.

Muchas gracias de nuevo.

Si me explicais como os paso el ejecutableque tengo en marcha.

oregon
30-05-2007, 19:42:00
Ahora estaba pensando, que seguro que hay cientos de librerias y componentes que se encargan de hacer todo tipo de cálculos y gráficos matemáticos como los que necesito, por lo que esa parte tampoco tendría por qué ser tan dura de preparar. Voy a ver que encuentro por la red...
Ya os cuento

Neftali [Germán.Estévez]
30-05-2007, 20:06:29
En el mismo sitio (link (http://neftali.clubdelphi.com/temp/Test%20imagenes%20SimpleGraph.zip)) de antes te he subido una versión con la lista de coordenadas locales de los puntos que vas añadiendo/borrando/moviendo.

Delphius
30-05-2007, 23:37:50
Oregon, debo admitir que yo del tema mucho no sé. Estuve haciendo memoria y me acordé del método de Runge-Kutta (http://es.wikipedia.org/wiki/Runge-Kutta). Que en pocas palabras toma dos puntos a y b. Y predice k puntos intermedios de acuerdo a una aproximación de primer, segundo, tercer o cuarto orden.

Se que lo tuyo es algo más complicado. Sobre todo si se trata de otros tipos de aproximaciones... sobre todo las del tipo logaritmicas y espirales ya de estos tipos no he oído hablar.

Yo la verdad, es que (para empezar) estaba pensando en algo simple:
Si se tiene una imagen y se toma el supuesto de que cada punto [X,Y] de la imagen puede expresarce en función. Algo como Y = f(X).
Entonces para una serie de puntos (lo más próximos posibles) marcados, mediante algún método de interpolación le precedimos valores y para cada x mayor al punto inicial y menor al final.
Luego repetir el proceso para los siguientes 2 puntos.

Algo como esto:

1. Tomar 2 primeros puntos:
1.1. Punto_inicial := Puntos(0);
1.2. Punto_final := Puntos(1);

2. Repetir hasta que no haya puntos a examinar
2.1. Aplicar Método de Ruge-Kutta según k-ésimos puntos a generar.
2.2. Para cada k-ésimo punto generado por Runge-Kutta:
2.2.1. Insertar en Puntos entre Punto_inicial y Final, siguiendo el k-ésimo orden.
2.3. Avanzar k lugares a Punto_inicial y Punto_final

3. Para cada punto en Puntos:
3.1. Calcular coordenada en imagen
3.2. Colocar punto y trazar línea desde el punto anterior

Si suponemos que Puntos() es una estructura dinámica que almacena todos los puntos correspondientes. De modo que se consiga algo como esto:

A-k1-k2-k3-k4-B-k1-k2-k3-k4-C-.....

Siendo A,B y C los puntos inicialmente cargado y entre cada uno de ellos los k generados.

Espero que se entienda mi idea. Tal vez no se ajusta a lo que buscas, es que no estoy muy puesto en ese tema, pero es que mi poco conocimiento del tema no me permite más.

No he visto el ejemplo que te envio Neftali pero si he visto pruebas del componente del que te habló.

Saludos,

oregon
31-05-2007, 10:03:39
Delphius,

Sí, el método de Runge-Kutta es muy bueno para estas cosas, aunque de momento creo que sería complicar en exceso el objetivo el programa. En realidad, creo que aprovechando que tenemos la imagen de fondo el método más recomendable es colocar más puntos. Para ello se puede hacer zoom hasta el límite de la resolución de la imagen. De esa forma, no estamos interpolando, sino metiendo datos, lo que reduce los errores.
Tal vez no haya explicado bien la idea. La cuestión es: la forma de las playas... ¿cual es su expresión matemática? ¿una ecuación linear y=ax+b? ¿tal vez de un grado mayor? ¿y=ax2+bx+c? O tal vez sigue una ecuación logarítmica,o exponencial? ¿tal vez es una función seno? ¿o una espiral?...
Para ello, se parte de la imagen para obtener cuants mas puntos mejor de la curva (en este caso la playa), y se van haciendo intentos de ajustar cada una de esas ecuaciones hasta que una se ajuste a la perfección (o lo mejos posible). Por ello, no busc un método de interpolación, sino la obtención de una curva de cualquier tipo a una serie de puntos dados. O lo que es lo mismo, una regresión.

Por otra parte, Neftalí, tu ejemplo me está gustando. El problema es que yo utilizo la versión gratuita de Delphi, en la que no se pueden instalar componentes. Y en este foro he visto que hay algo así como una puerta trasera, pero dado que no está claro su legalidad, pues no puedo usarlo. ¿habría alguna manera de hacer uso legal de ese código fuente de esos componentes para poder usarlo en mi proyecto? En cualquier caso, muchas gracias por los ejemplos, la verdad es que son muy ilustrativos, y resuelven gran parte de la parte inicial de adquisición de datos a partir de la imagen. Muchas gracias.

Neftali [Germán.Estévez]
31-05-2007, 12:01:33
¿habría alguna manera de hacer uso legal de ese código fuente de esos componentes para poder usarlo en mi proyecto? En cualquier caso, muchas gracias por los ejemplos, la verdad es que son muy ilustrativos, y resuelven gran parte de la parte inicial de adquisición de datos a partir de la imagen.

Bueno, correcto que no es legal en los Turbo instalar nuevos packages.
Una alternativa que alguien comentó alguna vez y que creo que no está fuera de la legalidad es instalar los componentes en el paquete de usuario.
No tengo Turbo Delphi instalado, así que no puedo probarlo, pero estaría bien que alguien que lo tenga lo confirmara. Así podrías instalar este componente legalmente.
Se trata de revisar los packages instalados a ver si está el paquete de usuario (normalmente dclusrXXX.bpl); Si está lo siguiente es comprobar si está el DPK para poder modificarlo (dclusrXXX.dpk o dclusrXXX.dproj).

Si esto no es posible (cuando alguien lo confirme), podemos usar la segunda alternativa, que es crear el componente en ejecución. Añade una cuantas líneas más, pero creo que no impide seguir con el proyecto. En ambos casos el resultado estaría dentro de lo legal.

Un saludo.

oregon
31-05-2007, 12:09:46
Muchs gracias neftali. Entonces a ver si encuentro algo más de informacion sobre como usar el paquete de usuario con el fin de meter ahí los compoenentes que necesito para esta parte del proyecto.

En cuanto sepaalgo más lo cuento. Gracias!!

seoane
31-05-2007, 12:16:35
Una alternativa que alguien comentó alguna vez y que creo que no está fuera de la legalidad es instalar los componentes en el paquete de usuario.
No tengo Turbo Delphi instalado, así que no puedo probarlo, pero estaría bien que alguien que lo tenga lo confirmara. Así podrías instalar este componente legalmente.

Vaya, vaya Neftali, así que revelando el gran secreto :p :D . Te lo confirmo, se pueden instalar componentes de esa forma, y aparecen luego en la paleta de componentes. Pero la duda no es si instalar componentes es técnicamente posible, la duda es si instalarlos es legal.

Por otro lado, no entiendo porque es tan necesario ese componente. Colocar puntos sobre una imagen, hacer zoom, pan, etc ... se puede hacer fácilmente por código. Puede que incluso con menos código que si hay que crear el componente a mano. De hecho creo que en algún hilo de oregon se trato alguno de esos temas, pero supongo que no le sirvió :(

oregon
31-05-2007, 12:37:48
Ciao Seoane,

Hombre secreto, secreto... llevo tiempo siguiendo la evolución de los hilos de este foro relacionados con el usar codigo fuente de otros componentes para usarlos con Turbo Delphi (version gratuita). Pero nunca lo he intentado hacer por esos debates que se han organizado respecto a la legalidad del asunto, que por tu comentario veo que no está nada claro.

Si, es cierto que esto ya lo he discutido en otros hilos, y si que me sirvio en parte, aunque lo de obtener las coordenadas de esos puntos sobre la imagen se me atrancó, lo reconozco, pero no quería ser un pesado en aquel hilo y deje de preguntar. Pero gracias a los consejosque recibí en aquellos hios tengo una version inicial, aunque no del todo funcional. Perosupongo que el código fuente del ultimo ejemplo de neftalí me vendría de perillas para intentar sacar las coordenadas de los puntos.

Pero el asunto de este hilo, no era discutir esas cosas, sino el ver si alguien se animaba a meterse en esto conmigo. Pero veo que no hay muchos voluntarios, aunque sí muy buenas intenciones e ideas (Gracias a todos!!)
Supongo que acabaré recurriendo a algún estudiante de informática para proponerle este programa como proyecto de fin de carrera o algo así.
O dejarlo irremediablemente para más adelante cuando tenga algo de tiempo para dedicarle a esto e ir haciendolo poco a poco.

En cualquier caso, muchas gracias de verdad por todos los comentarios.

Neftali [Germán.Estévez]
31-05-2007, 13:38:14
Te lo confirmo, se pueden instalar componentes de esa forma, y aparecen luego en la paleta de componentes. Pero la duda no es si instalar componentes es técnicamente posible, la duda es si instalarlos es legal.

Bueno eso es lo que quería confirmar. Me suena haber leído que no permite instalar nuevos packages, no que no permita añadir un componente al package de usuario.
Creo que la idea es no instalar paquetes completos. Pero que sí permita añadir un componente suelto si hace falta. Pero noestoy seguro de esto.

Por otro lado, no entiendo porque es tan necesario ese componente. Colocar puntos sobre una imagen, hacer zoom, pan, etc... se puede hacer fácilmente por código. Puede que incluso con menos código que si hay que crear el componente a mano.

Bueno crear un componente a mano son un puñado de líneas; Programar esas acciones (y programarlas bien) no son unas cuanas líneas. El trabajo que tiene hecho este componente es mucho y muy bueno.
Hace no muchos días nos hemos estado divirtiendo con un hilo relativo a Mandalas y a cómo dibujar; Pero tú y yo sabemos de las limitaciones de ese modelo. Sobre todo cuando hay que borrar objetos (por ejemplo). También discutimos que para poder borrar, seleccionar, deshacer y cosas similares el modelo necesario es diferente del que utilizamos allí.
Ya no basta con pintar puntos; Hace falta ir hacia otro camino. Es decir estructuras que mentengan los objetos y los repinten de forma eficiente.
Necesitamos métodos de Selección (markets/Rubberbanding), redimensionado y los comentados antes, como selección, pan, zoom, guardar/restaurar, impresión y exportación.

¿Que se puede hacer? Sí. Que son un puñado de líneas. No.
Y tampoco es trabajo para alguien que no está muy ducho en Delphi (como ha comentado el propio oregón). Está bien para hacer unas pruebas y practicar, pero si la idea es hacer un proyecto, porqué perder tiempo y esfuerzo en hacer algo qu alguien ya ha hecho y que no es nuestro objetivo. Recordemos que el objetivo final es otro.

seoane
31-05-2007, 14:00:56
Hace no muchos días nos hemos estado divirtiendo con un hilo relativo a Mandalas y a cómo dibujar; Pero tú y yo sabemos de las limitaciones de ese modelo. Sobre todo cuando hay que borrar objetos (por ejemplo). También discutimos que para poder borrar, seleccionar, deshacer y cosas similares el modelo necesario es diferente del que utilizamos allí.

En ningún momento hable de usar ese "modelo".

Suerte con el componente ...

oregon
31-05-2007, 14:07:06
No os pegueis... :)
Tengo que daros la razón a ambos.

Por una parte... si se puede programar con unas pocas lineas, es más divertido que usar un componente externo, y es mi forma de aprender. De hecho eso es lo que estaba haciendo hasta ahora con los zoom, el pintar los puntos, etc.
Sin embargo, y llegados a un punto en el que el trabajo se complica, estoy de acuerdo con neftalí en que si ya hay componentes creados, para que perder el tiempo programando unos propios si son lo suficientemente buenos?

Pensando en mi proyecto y en el que creo que tendré que seguir currándomelo yo, mi único problema ahora es calcular las coordenadas de cada punto (que yo uso una imagen), no solo para guardarlas, sino también para poder mover los puntos de sitio cuando se reescala la imagen de fondo, y que no queden descolocados. En eso el ejemplo de Neftalí es perfecto. tal vez con unas pocas lineas de código baste sin tener que instalar o usar componentes externos.

Con eso se acabaría lamayor parte de los problemas que tengo encuanto a la adquisición de datos (puntos) del proyecto, y ya podríapegarme con los distintos métodos de regresión.

Neftali [Germán.Estévez]
31-05-2007, 15:15:38
No os pegueis...

Aquí nos "pegamos" muchas veces al día.
Una vez en cada hilo, pero no pasa de ahí la cosa... :D:D:D

He subido una versión en el mismo link donde estaba y además al FTP del Club Delphi (http://www.terawiki.clubdelphi.com/)(que por cierto ha sufrido una agradable remodelación) en la sección de ejemplos. Con el nombre Imagenes_y_puntos_con_TSimpleGraph.zip (http://www.terawiki.clubdelphi.com/archivos/Delphi-Win32/Ejemplos/Imagenes_y_puntos_con_TSimpleGraph.zip)

Tiene añadidas algunas opciones para añadir las líneas, ocultarlas y demás.
Además ya no hace falta instalar el componente (aunque va el paquete para instalarlo), el proyecto que hay subido lo crea al iniciarse.
También van los fuentes del componente (modificado) y los fuentes del ejemplo.

Espero que te sea útil y que si haces avances vayas comentándolos y subiéndolos por aquí.

oregon
31-05-2007, 15:41:11
Muchas gracias Neftalí.

me descargo ahora mismo los ficheros para echarles un vistazo. Pero dame tiempo, porque ando bastante apurado y tal vez no pueda probar nada en un mes o así.

Pero de verdad que muchas gracias. Seguro que me es de mucha utilidad.

Un saludo!

karlaoax
31-05-2007, 16:21:24
;) hola aqui de nuevo molestando....... estoy haciendo pruebas de como hacer este proyecto, pero si de matematicas estoy :confused: jjejejeje, pero seguire la evolucion de este post para ver la soluciones

Neftali [Germán.Estévez]
31-05-2007, 16:43:35
...dame tiempo, porque ando bastante apurado y tal vez no pueda probar nada en un mes o así.

A tu ritmo, sin prisas. El hilo seguirá aquí...;)
Yo con los temas matemáticos ya no me atrevo. Si alguien se atreve a realizar interpolaciones a partir de los puntos, que se anime...

Delfino
07-06-2007, 19:05:58
Oregon,
Aqui (http://photofiltre.free.fr/frames_en.htm) un programa feeware de tratamiento de imagenes hecho integramente con Delphi, en el sitio tiene links a plug-ins y componentes Delphi q te pueden interesar,

espero sirva..

fjcg02
08-06-2007, 13:26:33
He leido Runge Kuta y me han dado escalofríos. Siempre me lo he imaginado gordo, con una argolla en la nariz cociendo estudiantes jovencitos, con la carne todavía blanda.

He leido el hilo y me parece interesante. En su día ya te mandé un embrión de una aplicación que empecé y nunca terminé por falta de colaboración del usuario, pero ha evolucionado y podría adaptarse. Si quieres te puedo mandar lo que tengo hasta ahora para que le eches un vistazo.

Respecto a los datos que proporcionas, me falla la matemática, ya que no me acuerdo de mucho, pero le doy a dar una vueltilla a ver si puedo aportar algo.

Saludos

Robert01
08-06-2007, 19:28:43
Hola

Oregon, una pregunta:

¿y si ajustas la curva usando cuadrados mínimos? ¿No sería más conveniente hacerlo de este modo?

Se podría probar con varias curvas diferentes o con combinaciones de ellas y tomar aquella en la que el error sea menor.

Saludos

fide
08-06-2007, 21:35:47
Oye, servira OpenGl para algo en este programa????

Delphius
09-06-2007, 00:34:20
¿y si ajustas la curva usando cuadrados mínimos?

Eso pensé en segunda instancia a mi primera explicación... pero debido a algunas propiedades, características y limitaciones del método de los mínimos cuadrado lo dejé de lado.

Inconveniente:
El método de mínimos cuadrados (http://www.clubdelphi.com/foros/showthread.php?t=23512) sólo se puede aplicar cuando existe una relación lineal (proporcional o inversamente proporcional). Ya que lo que hace estimar una RECTA y no una curva. Y como sabemos, no se consiguen buenas estimaciones con una recta. Por lo general se emplean curvas. Una playa puede tener muchas curvas, zig-zags.
Imaginate una playa en forma de cerradura.... si se dá el caso, este método fallará pues la nuve de dispersión tendrá una forma circular (o lo que es lo mismo su covarianza será igual a cero)

Aplicar el método de los mínimos cuadrado necesita evaluar TODODS los puntos en CONJUNTO... esto puede llegar a una lectura general erronea de la forma.

Se necesita de un algoritmo iterativo, Del tipo "puntos a puntos", para conseguir lo que oregon necesita. Ya que el error conseguido será menor.

Un algoritmo iterativo conseguirá predecir la dirección punto a punto. E incluso (ya para algo más grande) se podría llegar a desarrollar uno que aprenda: "Si la pendiente anterior es positiva trazar de seguir subiendo"

Saludos,

Robert01
09-06-2007, 02:20:07
Inconveniente:
El método de mínimos cuadrados (http://www.clubdelphi.com/foros/showthread.php?t=23512) sólo se puede aplicar cuando existe una relación lineal (proporcional o inversamente proporcional)
Esto en realidad es relativo ya que es posible linealizar la relación:


Algunos problemas de regresión no lineal pueden linealizarse mediante una transformación en la formulación del modelo. Por ejemplo, consideremos el problema de regresión no lineal (ignorando el término de error):
Algunos problemas de regresión no lineal pueden linealizarse mediante una transformación en la formulación del modelo. Por ejemplo, consideremos el problema de regresión no lineal (ignorando el término de error):

y= a exp(bx)
Aplicando logaritmos a ambos lados de la ecuación, se obtiene:

ln(y) = ln(a) + bx;
Aunque es sumamente complicado podría aplicarse por tramos y luego obtenerse una función suma de todos los tramos de la curva.


Pero también podría hacerse usando el algoritmo de gauss newton, éste se utiliza para resolver problemas no lineales de mínimos cuadrados (http://es.wikipedia.org/wiki/M%C3%ADnimos_cuadrados). Es una modificación del método de optimización de Newton (http://es.wikipedia.org/wiki/M%C3%A9todo_de_Newton) que nos usa segundas derivadas y se debe a Carl Friedrich Gauss (http://es.wikipedia.org/wiki/Carl_Friedrich_Gauss).

Saludos

Delphius
09-06-2007, 04:50:25
Gracias, Rober01 por tu explicación...veo que yo estaba confundiendo las cosas.
Sería mejor que descanse esta noche... tuve un día de mucha acción cerebral y no dormi del todo bien anoche... Eso hizo que confundiera los términos. Tengo mi diminuto cerebro hecho ensalada.

¿Método de Newton? Ummmmm..... me está sonando.... se que en cálculo numérico algo vi. Y si no me equivoco debo tener todavía algunas que hojas de apuntes con algoritmos. Tendría que fijarme entre todas las carpetas... y hojas sueltas que tengo tirada en el armario.

Si tengo un tiempo mañana, y si me acuerdo lo busco.

Saludos,

fjcg02
21-06-2007, 00:12:17
Os pongo un pantallazo de la aplicación que empecé y que así ha quedado.

SAludos


[img=http://img487.imageshack.us/img487/901/pantallazoeu7.th.jpg] (http://img487.imageshack.us/my.php?image=pantallazoeu7.jpg)

Robert01
21-06-2007, 04:26:18
Tiene buen aspecto. Se ve interesante el proyecto.

Saludos

fjcg02
21-06-2007, 08:00:12
Lo dices por mi casa o por el resto ?? La foto es muy chula, pero no la he hecho yo !! ;)

Marco en la imagen varios puntos que se comentan en el hilo.

Escalado ( aunque un poco pobre )
Coordenadas UTM ( se marcan abajo a la izquierda). Según se mueve el ratón se van actualizando.
Carga de ortofotos que se almacenan en la BBDD. A cada ortofoto se le da un nombre y una referencia, que son las coordenadas utm x e y del punto inferior izquierda. Además, el offset, que es la distancia del ancho.

Con todo esto, se puede cargar cualquier imagen y georeferenciarla sabiendo la referencia utm de la esquina inferior izquierda y el ancho. Para el que no lo sepa, las coordenadas utm son proporcionales, y si no estoy equivocado, se dan en metros.

Me faltaría hacer al conversión a coordenadas geográficas, tengo los datos para hacerlo, pero como el proyecto quedó aparcado, me da pereza seguir para que acabe en el montón.

Saludos a todos.