Tengo un mapa euclidiano toroidal-ish. Esa es la superficie es un rectángulo euclidiano plano, pero cuando un punto se mueve al límite derecho, aparecerá en el límite izquierdo (con el mismo valor y), dado por x_new = x_old% ancho¿Distancia más corta entre puntos en un mapa envuelto toroidalmente (x e y)?
Básicamente, señala se trazan en función de: * ver editar
(x_new, y_new) = (x_old % width, y_old % height)
Piense Pac Man - caminar fuera de uno de los bordes de la pantalla hará que usted aparece en el borde opuesto.
¿Cuál es la mejor manera de calcular la distancia más corta entre dos puntos? La implementación típica sugiere una gran distancia para los puntos en las esquinas opuestas del mapa, cuando en realidad, la distancia real envuelta está muy cerca.
Lo mejor que puedo pensar es calcular Delta X clásico y Delta X envuelto, y Delta clásico Y y Y envuelto, y usar el más bajo de cada par en la distancia Sqrt (x^2 + y^2) fórmula.
Pero eso implicaría muchos controles, cálculos, operaciones, algunas que creo que podrían ser innecesarias.
¿Hay una manera mejor?
editar
Cuando un objeto se mueve, se mueve a la posición (x_old, y_old), corre a través de la fórmula anterior, y almacena (x_new, y_new) como su posición. La fórmula anterior solo se agregó para aclarar qué sucede cuando los objetos se mueven a través del límite; en realidad, solo se almacena un par (x, y) en cada objeto a la vez.
lo tanto, su geometría es la misma que en asteroides? http://en.wikipedia.org/wiki/Asteroids_(video_game) –
Sí, solo eso =) –
Por cierto, en el habla de física diríamos que estás usando condiciones de frontera periódicas 2D. De hecho, es equivalente (creo que isomorfo) a la superficie de un toro. –