entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

¿Como dibujar rutas empleando el menor numero de puntos posible?

Buenas, tengo esta duda desde hace ya algún tiempo... la solvente de un modo que no estoy contento internamente (probé a purificarme con danzas tribales pero no funciona). El tema es, un usuario puede trazar una ruta libremente por un lienzo... (como cuando coges el lápiz en el paint).. hasta aquí todo correcto, el tema está en que quiero guardar la información de "la ruta" trazada pero empleando el menor numero de puntos posibles (obviamente perdiendo cierta 'calidad').
El método que usé es tan sencillo como ver las diferencias de los ángulos que van formando los puntos y si esta dentro de lo que yo considero tolerable el punto se omite... si supera ese "umbral" el punto se guarda.... obviamente cuanto mas amplia defina esa diferencia la calidad del trazado disminuye... la cuestión que tengo es si existe algún método algo mas "pro" pero que no me cuesta la vida implementarlo xDD. Gracias.

Cuantos menos puntos se guarden y mas fiel quede el trazado resultante al original, mejor.
No se si me lié explicando :\

0voto

Peter comentado

¿Y esto lo quieres hacer en....? (Poner alguna de las cientos de miles de opciones y lenguaje de programación aquí)

¿Y tu código de lo que llevas hecho es?

Si no das los detalles mínimos y más importantes, va a ser complicado que alguien te pueda dar una respuesta efectiva.

Saludos.

0voto

carlossevi comentado

Te voto positivo sólo por la danza purificadora que intentaste para tranquilizar tu conciencia =)

1 Respuesta

2votos

Leonardo-Tadei Puntos226650

Hola @unsigned_char,

la mejor forma de guardar esta información depende bastante del método de entrada del usuario, que determinará las características de la ruta trazada.

Si la ruta se traza poniedo puntos, lo mejor es guardar la coordenada de dichos puntos. Dependiendo de la superficie sobre la que se dibuja las coordenadas serán siempre enteras (lo recomendado) o decimales.

Si la ruta se puede trazar a mano alzada, lo más eficiente es guardar puntos como curvas Bézier, en la que además del origen se guardan dos vectores que indican la longitud y el radio de la curva https://es.wikipedia.org/wiki/Curva_de_B%C3%A9zier.

No estoy tan seguro de que tu estrategia para guardar menos puntos (basada en la diferencia del ángulo anterior y siguiente) sea realmente efectiva: es cierto que guardás menos puntos, pero de todas formas acceder a los puntos, ya sean decenas o miles no debería suponer mucha diferencia si la información está estructurada, normalizada y almacenada en alguna DB (para saber qué es mejor ahbría que medir tiempos y uso de CPU de una y otra forma).

Cómo dice @Peter, con más detalles de tu implementación podríamos ver mejor qué optimizar... a veces es sorprendente como unos ajustes mejoran un sistema, y lo más sorprendente es que los cuellos de botella rara vez están en dónde uno se los imagina.

Saludos cordiales!

PD: la danza ritual siempre es reconfortante, aunque no siempre mejora el código ;-)

0voto

unsigned_char comentado

Gracias! mirare el tema de las curvas Bézier aunque no estoy seguro de si es lo que estoy buscando...

Aqui os dejo una muestra de lo que quiero mejorar: https://youtu.be/7SwtqSppH6o

El lenguaje es C++, usando SDL

Muchas gracias por las respuestas!

0voto

Leonardo-Tadei comentado

Si vas a dibujar así, a mano alzada, salvo que tengas que editar la curva más tarde, es posible que lo que más te convenga sea guardar el mapa de bits directamente...

La muestra de dibujo del video no me da, la verdad, mucha idea de la aplicación ni de las cuestiones referentes a la ruta :-(

0voto

unsigned_char comentado

Disculpa. Te explico lo que se ve en el video.

Los "envelopes" son animaciones... los puntos que ves en la zona inferior que se van creando corresponden a los valores X,Y,R(rotacion).. le dicen a la "figura" donde tiene que estar en ese momento... lo que quiero es tener la menor cantidad de estos puntos para realizar la animación.

Cuando dibujo "la ruta", lo que estoy haciendo es trazar el recorrido de esa animacion... lo que tarde en dibujar el circuito es lo que tardará la figura en recorrerlo.

Espero haber aclarado más el tema y muchas gracias por tu tiempo!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta