math - puntos - Calcular la distancia entre dos coordenadas x/y?
distancia entre dos puntos ejemplos (4)
Entonces, estoy buscando la distancia euclidiana en la superficie bidimensional de un toro, supongo.
sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1 - y2|)^2)
donde w
y h
son el ancho (x) y la altura (y) de la cuadrícula, respectivamente.
Me gustaría calcular la distancia entre dos coordenadas x / y en la superficie de un toro . Entonces, esta es una cuadrícula normal que tiene la propiedad de que sus esquinas y lados están ''conectados''. Por ejemplo, en una cuadrícula de 500x500, el punto en (499, 499) es adyacente a (0, 0) y la distancia entre por ejemplo (0,0) y (0,495) debería ser 5
¿Hay alguna buena forma matemática de calcular esto?
Si su cuadrícula se enrolla alrededor de los bordes, habrá cuatro distancias entre cada coordenada (para 2 dimensiones). Supongo que quieres saber la distancia más corta.
Usemos una cuadrícula más pequeña, los números son un poco más manejables. Digamos que la cuadrícula es 10x10. También usemos solo una dimensión por simplicidad (en cuyo caso habrá solo dos distancias), tal como lo ha hecho en su ejemplo. Digamos que tenemos los puntos 0,2 y 0,6. Las dos distancias entre los puntos son d_1 = (6-2) = 4 y d_2 = (10-6) + 2 = 6, por lo que en este caso la distancia más corta sería d_1.
En general, puedes hacer lo siguiente:
- Para cada coordenada:
- restar el menor del número más grande
- si el resultado es mayor que la mitad del ancho de la cuadrícula, la distancia más corta en esta coordenada es el ancho de la cuadrícula menos el resultado
- si el resultado es menos de la mitad del ancho de la cuadrícula, la distancia más corta en esta coordenada es el resultado
Luego, utilizando el teorema de Pitágoras, la distancia más corta entre los dos puntos es la raíz cuadrada de la suma de los cuadrados de las distancias más cortas en cada dirección. Puedes calcular las otras tres distancias calculando el teorema de Pitágoras usando las otras combinaciones de distancias en cada dirección.
Como ha dicho otro póster, la forma que se forma cuando se envuelve alrededor de los bordes (para una cuadrícula bidimensional) es un toro y creo que el método que he usado anteriormente es el mismo que la ecuación dada, pero tiene la ventaja de que puede ser extendido a n-dimensiones si es necesario. Desafortunadamente no hay una visualización fácil por encima de 2 dimensiones.
para los puntos (x1, y1) y (x2, y2), necesita calcular 4 distancias:
- de (x1, y1) a (x2, y2)
- de (x1, y1) a (x2, 500-y2)
- de (x1, y1) a (500-x2, y2)
- de (x1, y1) a (500-x2, 500-y2)
y luego tomar el mínimo de esos.
- Si / mientras la distancia entre las coordenadas x es mayor que la mitad del tamaño X de la cuadrícula, agregue el tamaño X de la cuadrícula a la coordenada x más pequeña.
- Haz lo mismo con Y.
- Luego calcula la distancia.