Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reducir el número de nodos en una vía #22

Open
cruzki opened this issue May 5, 2012 · 2 comments
Open

Reducir el número de nodos en una vía #22

cruzki opened this issue May 5, 2012 · 2 comments

Comments

@cruzki
Copy link

cruzki commented May 5, 2012

Se trata de eliminar nodos redundantes en las vías. Por ejemplo:
A ------ B --------C
El nodo B es redundante. Nótese que en algunos casos podemos considerar el nodo redundante aunque perdamos precisión. Hay que pensar también en los objetos redondeados.

@cruzki
Copy link
Author

cruzki commented May 5, 2012

El proceso podría ser algo así.

  • Durante el proceso de simplificación de vías, uno de los pasos es juntar en un mismo way todos los ways unitarios (con dos nodos) que sea posible.
  • Al terminar dicho paso recorreríamos el way eliminando los nodos intermedios innecesarios calculando los ángulos que formen cualesquiera 3 nodos consecutivos. Esto se hace vía la función atan2 [2] teniendo en cuenta [1]. Esto es
    lo que tenemos que calcular es:

if (Math.abs(atan2(x1-x2,y1-y2)-atan2(x1-x3,y1-y3))<epsilon)

  • Si el ángulo es menor en valor absoluto que un cierto número de grados, nos cepillamos el nodo intermedio y listo.

[1] http://maralboran.org/wikipedia/index.php/%C3%81ngulo_entre_dos_rectas_del_plano_%281%C2%BABach%29
[2] http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#atan2%28double,%20double%29

@AnderPijoan
Copy link
Owner

if (Math.abs(atan2(x1-x2,y1-y2)-atan2(x1-x3,y1-y3))>3.1)
elimina todos los nodos que tengan menos de 3 grados
if (Math.abs(atan2(x1-x2,y1-y2)-atan2(x1-x3,y1-y3))>3)
elimina los que tengan menos de 10 grados

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants