2012-01-18 2 views
7

두 개의 3D 점이 있습니다.
예 :두 개의 3 차원 점 사이의 거리를 계산하는 알고리즘?

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

누구나 점 사이의 부동의 거리를 계산하는 알고리즘에 대한 아이디어?

+14

우리는 당신이 즉시 위키 백과의 정전이 끝나는대로 알려 드리겠습니다. – Nathan

+2

지역 사회가 인터넷 검색을하지 않고 답변 할 수없는 경우 세상은 운명을 저 지르게됩니다. 어느 날 생각 나게 하네. 왜 너는 이걸 구글하지 않았 니? – Jon

답변

21

이 개 3D 점 사이의 유클리드 거리입니다 (검증되지 않은 오버 플로우에 취약)

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

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

그리고 N 차원에서

는 :

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

편집 : 나는 많이 게시 Zip 솔루션을 선호 아래 dasblinkenlight로! 두 지점이 있다면

+0

델타 x 제곱이 맞습니까? –

+0

감사합니다. – Headpuster

+0

@ JohnBoker : 고마워. 또한이 질문은 여기에 많은 시간을 물었습니다 .... –

4

처럼 2D하지만 하나 더 좌표

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

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

는 물론 C#으로 아래로 기록되지하지만 당신은 아이디어를 얻을.

2

:
는 P1 = (의 X1, Y1, Z1)
P2가 = (X2는 Y2가, Z2)
거리가 SQRT((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)

그래서 사용할 수

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)); 
LINQ와 C#에서
16

당신은이 작업을 수행 할 수 있습니다

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

목 개별 좌표 간의 쌍의 차이를 제곱하고 합계의 제곱근을 반환합니다.

편집 :이 솔루션은 1보다 크거나 같은 임의의 수의 크기에서 작동합니다 (오스틴 살로 넨이 지적했기 때문에).

+0

아주 좋은 n 차원 솔루션 –

+0

이것은 멋진 한 줄을 보입니다 : D는 그것이 작동 여부를 검증 했습니까? – MonsterMMORPG

+0

@MonsterMMORPG'point1'과'point2'의 크기가 일치 할 때, 쌍의 차이의 제곱합의 제곱근을 생성하는 것을 제외하면 다른 선택의 여지가 없습니다 :-) – 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))

관련 문제