Ho una mappa euclidea toroidale. Quella è la superficie è un rettangolo piatto euclideo, ma quando un punto si sposta verso il limite destro, apparirà al limite sinistro (con lo stesso valore y), dato da x_new = x_old% larghezzaDistanza più breve tra i punti su una mappa con avvolgimento toroidale (avvolgimento x e y)?
Fondamentalmente, punti sono tracciati in base a: * vedere Modificare
(x_new, y_new) = (x_old % width, y_old % height)
Pensate Pac Man - a piedi fuori un bordo dello schermo vi farà apparire sul bordo opposto.
Qual è il modo migliore per calcolare la distanza più breve tra due punti? L'implementazione tipica suggerisce una grande distanza per i punti sugli angoli opposti della mappa, quando in realtà, la distanza reale avvolta è molto vicina.
Il modo migliore che riesco a pensare è calcolare Delta Delta classico e Delta X avvolto, Delta classico Y e Delta avvolto Y, e utilizzare il più basso di ogni coppia nella distanza Sqrt (x^2 + y^2) formula.
Ma ciò implicherebbe molti controlli, calcoli, operazioni, alcune che ritengo potrebbero non essere necessarie.
C'è un modo migliore?
modifica
Quando un oggetto si muove, si muove alla posizione (x_old, y_old), convoglia attraverso la formula di cui sopra, e memorizza (x_new, y_new) come la sua posizione. La formula sopra è stata aggiunta solo per chiarire cosa succede quando gli oggetti si muovono attraverso il confine; in realtà, solo una coppia (x, y) è memorizzata in ogni oggetto alla volta.
Quindi la geometria è la stessa in asteroidi? http://en.wikipedia.org/wiki/Asteroids_(video_game) –
Sì, proprio questo =) –
A proposito, in fisica si direbbe che si stanno utilizzando condizioni al contorno periodiche 2D. In effetti è equivalente (credo isomorfo) alla superficie di un toro. –