두 개의 3D 점이 있습니다.
예 :두 개의 3 차원 점 사이의 거리를 계산하는 알고리즘?
float[] point1 = new float[3] {1.3919023, 6.12837912, 10.391283};
float[] point2 = new float[3] {48.3818, 38.38182, 318.381823};
누구나 점 사이의 부동의 거리를 계산하는 알고리즘에 대한 아이디어?
두 개의 3D 점이 있습니다.
예 :두 개의 3 차원 점 사이의 거리를 계산하는 알고리즘?
float[] point1 = new float[3] {1.3919023, 6.12837912, 10.391283};
float[] point2 = new float[3] {48.3818, 38.38182, 318.381823};
누구나 점 사이의 부동의 거리를 계산하는 알고리즘에 대한 아이디어?
이 개 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로! 두 지점이 있다면
처럼 2D하지만 하나 더 좌표
P1(x1, y1, z1); P2(x2, y2, z2)
d = SquareRootOf((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2));
는 물론 C#으로 아래로 기록되지하지만 당신은 아이디어를 얻을.
:
는 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#에서
당신은이 작업을 수행 할 수 있습니다
var dist = Math.Sqrt(point1.Zip(point2, (a, b) => (a - b)*(a - b)).Sum());
목 개별 좌표 간의 쌍의 차이를 제곱하고 합계의 제곱근을 반환합니다.
편집 :이 솔루션은 1보다 크거나 같은 임의의 수의 크기에서 작동합니다 (오스틴 살로 넨이 지적했기 때문에).
아주 좋은 n 차원 솔루션 –
이것은 멋진 한 줄을 보입니다 : D는 그것이 작동 여부를 검증 했습니까? – MonsterMMORPG
@MonsterMMORPG'point1'과'point2'의 크기가 일치 할 때, 쌍의 차이의 제곱합의 제곱근을 생성하는 것을 제외하면 다른 선택의 여지가 없습니다 :-) – dasblinkenlight
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))
우리는 당신이 즉시 위키 백과의 정전이 끝나는대로 알려 드리겠습니다. – Nathan
지역 사회가 인터넷 검색을하지 않고 답변 할 수없는 경우 세상은 운명을 저 지르게됩니다. 어느 날 생각 나게 하네. 왜 너는 이걸 구글하지 않았 니? – Jon