2012-01-18 48 views
7

Tengo dos puntos tridimensionales.
Ejemplo:Algoritmo para calcular una distancia entre 2 puntos tridimensionales?

float[] point1 = new float[3] {1.3919023, 6.12837912, 10.391283}; 
float[] point2 = new float[3] {48.3818, 38.38182, 318.381823}; 

Cualquier persona una idea para un algoritmo para calcular la distancia de flotación entre los puntos?

+14

Nos haremos saber tan pronto como termine el apagón de Wikipedia. – Nathan

+2

Si la comunidad no puede responder a esto sin buscar en Google, entonces el mundo está condenado. Lo cual me recuerda: ¿por qué no googleaste esto? – Jon

Respuesta

21

La distancia euclídea entre dos puntos 3D es:

float deltaX = x1 - x0; 
float deltaY = y1 - y0; 
float deltaZ = z1 - z0; 

float distance = (float) Math.Sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ); 

Y en n dimensiones (no probado y vulnerable al desbordamiento):

float DistanceN(float[] first, float[] second) { 
    var sum = first.Select((x, i) => (x - second[i]) * (x - second[i])).Sum(); 
    return Math.Sqrt(sum); 
} 

Editar: me gusta mucho más la solución Zip publicado por dasblinkenlight abajo!

+0

te refieres al delta x al cuadrado ¿verdad? –

+0

Gracias, señor. – Headpuster

+0

@JohnBoker: corregido, gracias. También esta pregunta se ha hecho MUCHAS veces aquí en SO .... –

4

Al igual que en 2D, pero con una más de coordenadas:

P1(x1, y1, z1); P2(x2, y2, z2) 

d = SquareRootOf((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2)); 

Obviamente no está escrito en C#, pero usted consigue la idea.

2

Si tiene dos puntos:
P1 = (x1, y1, z1)
P2 = (x2, y2, z2)
distancia es SQRT((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)

lo que podría utilizar

float deltax = point2[0] - point1[0]; 
float deltay = point2[1] - point1[1]; 
float deltaz = point2[2] - point1[2]; 
float distance = (float) Math.Sqrt(
    (deltax * deltax) + 
    (deltay * deltay) + 
    (deltaz * deltaz)); 
16

En C# con LINQ se puede hacer esto:

var dist = Math.Sqrt(point1.Zip(point2, (a, b) => (a - b)*(a - b)).Sum()); 

Th resume las diferencias cuadradas por pares entre coordenadas individuales, y devuelve la raíz cuadrada aritmética de la suma.

EDIT: Esta solución funciona para cualquier cantidad de dimensiones mayores o iguales a una (gracias a Austin Salonen por señalarlo).

+0

Muy buena solución n-dimensional –

+0

esto se ve impresionante en una sola línea: D ¿Has probado para verificar si funciona o no? – MonsterMMORPG

+0

@MonsterMMORPG Cuando los tamaños de 'point1' y' point2' coinciden, no tiene otra opción que producir una raíz cuadrada de la suma de las diferencias cuadradas pares :-) – dasblinkenlight

10

enter image description here

float distance=(float) Math.Sqrt(Math.Pow(point1[0]-point2[0],2) + Math.Pow(point1[1]-point2[1],2) + Math.Pow(point1[2]-point2[2],2))

Cuestiones relacionadas