¿Cuál es la mejor manera de encontrar una distancia entre dos puntos en 2D sin usar el teorema de Pitágoras?

No conozco ningún algoritmo de distancia que sea más eficiente que aplicar la fórmula de distancia euclidiana (que es simplemente el Pythogorean en forma de geometría coordinada).

Suponiendo que desea la distancia euclidiana entre los puntos [matemática] (x_1, y_1) [/ matemática] y [matemática] (x_2, y_2) [/ matemática], puede dividirla fácilmente en sus operaciones elementales.

Para hacer esto, deberá aplicar los siguientes conceptos:

  1. La potencia más alta que necesitará para aumentar un número en este caso es 2 (es decir, un cuadrado). Una operación cuadrada es solo una operación aritmética simple, por ejemplo, [math] x ^ 2 = x \ cdot x [/ math]
  2. Una raíz cuadrada (que es donde reside la penalización de rendimiento) se puede calcular utilizando una variedad de métodos. Vea aquí una lista de métodos: http://en.wikipedia.org/wiki/Met…
    La mayoría de ellos se basan solo en operaciones aritméticas.
  3. Luego, simplemente aplique lo anterior a la fórmula de distancia euclidiana para obtener la distancia que necesita, hasta un nivel específico de precisión numérica:
    [matemáticas] d = \ sqrt {(x_1 – x_2) ^ 2 + (y_1 – y_2) ^ 2} [/ matemáticas]

Dicho esto, dudo que esto sea más rápido que simplemente programar la fórmula de distancia euclidiana directamente en el lenguaje de programación de su elección. La mayoría de los lenguajes tienen implementaciones integradas de bajo nivel de sqrt() que probablemente serán más eficientes que cualquier solución manual.

Observaciones

  • Si solo está comparando dos distancias, ni siquiera necesita realizar la operación de raíz cuadrada: solo compare las distancias cuadradas.
  • Si solo desea una aproximación rápida de la distancia, estos artículos pueden ser de su interés.

    Funciones rápidas de distancia aproximada: http://www.flipcode.com/archives…

    Implementación de raíz cuadrada inversa de Quake III: http://www.codemaestro.com/revie…

Hasta cierto punto, depende de la cantidad de imprecisión con la que esté dispuesto a vivir y de los recursos que tenga disponibles. Las tablas de búsqueda pueden aproximarse a las raíces cuadradas (o funciones trigonométricas), y una tabla de búsqueda suficientemente grande podría funcionar para su aplicación. ¿Qué rango de valores espera ver y qué grado de precisión es necesario?

Otro enfoque es utilizar el paralelismo para aumentar el número de distancias calculadas a la vez. Si puede vectorizar la operación, la latencia de una sola multiplicación o extracción de raíz cuadrada no será tan crítica. Por ejemplo, la extensión Intel SSE contiene una instrucción SQRTPS que puede calcular cuatro raíces cuadradas de precisión simple a la vez. También podría lograr un mayor paralelismo en el nivel de instrucción al intercalar múltiples cálculos de distancia.

Existen algoritmos para encontrar “sumas pitagóricas”, las distancias a las que se refiere, sin calcular raíces cuadradas, o incluso sin multiplicaciones o divisiones. El algoritmo de Moler-Morrison es el más rápido para cálculos de alta precisión ( http://www.scribd.com/doc/295688 …), y para un cálculo rápido sin multiplicación o división de hardware (o raíz cuadrada), el cálculo de arco-tangente CORDIC ( http://www.convict.lu/Jeunes/Mat …) usa solo sumas y restas, y produce la suma pitagórica como un subproducto.

Si solo le interesa ordenar las distancias por orden de rango, tenga en cuenta que no necesita echar raíces cuadradas; El orden de clasificación por el cuadrado de la distancia (es decir, x ^ 2 + y ^ 2) es suficiente.

Si sus coordenadas X, Y son latitud y longitud larga, las distancias no se pueden calcular como sumas simples de Pitágoras.

More Interesting

Cómo estudiar astrofísica teórica (nivel universitario) desde casa si he terminado con la física y las matemáticas de los grados 11 y 12

¿Cuál es la lógica detrás de la prueba por inducción? No puedo entender por qué el método de inducción proporciona una prueba, si el segundo paso es una hipótesis. Por lo tanto, no podemos probarlo, como en el caso base.

Cómo dividir 86 personas en grupos para que cada grupo tenga igual o más de 6

¿Qué es un kernel en el dominio de Fourier?

¿Cuántos kW se necesitan para mantener la temperatura alta en un jacuzzi al aire libre?

¿De cuántas maneras se pueden ordenar las letras de la palabra NOTACIÓN?

¿Por qué uno optaría por un B.Sc, especialmente en Física o Matemáticas, en lugar de Ingeniería? ¿Cuáles podrían ser las posibles razones además de la de convertirse en maestro?

¿Puedo ser economista incluso si no soy bueno en matemáticas?

¿Cuál es la relación matemática entre el espacio de imagen RGB a LAB?

¿Cuál es la mejor forma de jugar contra 4-2-2-2?

Cómo resolver una base a una potencia negativa a una potencia negativa

¿Cuál es la intuición detrás de la fórmula de la distancia?

¿Cuál es la explicación CONCEPTUAL de cómo divide una fracción por otra?

Dada la secuencia 1, 2, 2, 3, 3, 3, 4, 4, 4, 4,. . . ¿Cuál es el decimoquinto término? ¿Cuál es el centésimo término? ¿Cuál es el término 1 millón?

Cómo demostrar que cualquier subconjunto de un conjunto finito es finito