본문 바로가기
language/javascript

Euclidean Distance (유클리디안 거리)

by vamalboro 2010. 4. 11.
Euclidean Distance

사용자 삽입 이미지

위 공식은 유클리드라는 사람이 만든 N차원에서의 두 점간의 거리를 구하는 공식이다.

재미있는 문제를 풀어보다 이 공식으로 문제를 풀어야 해서 찾아보았고 역시나.

기초 수학이 부족해 루트부터 다시 개념잡고 공부!

일단 p와 q는 점을 나타낸다.

p1, q1은 각 점들의 좌표다. 예를 들어 2차원공간에서의 좌표를 나타낼때

우리는 보통 x, y로 좌표를 표현하는데 이 것을 위의 공식으로 나타내면

첫번째 점의 x, y좌표는 p1, p2로 나타낼수 있고, 두번째 점의 x, y좌표는 q1, q2로 나타낼 수 있다.

3차원이라면 x, y, z, p1, p2, p3이다.

2차원을 예로 들어 보자.

첫번째 점 p의 좌표는 (x=3, y=4)이고 두번째 점 q의 좌표가(x=2, y=11)이라고 할때 위의 공식으로 식을 만들어 풀어보면 아래와 같다.

1. 루트 ( (3 - 2)^2 + (4 - 11)^2 )
2. 루트 ( 1 + -7^2)
3. 루트 ( 1 + 49 )
4.  7.0710...


이 공식은 2차원 공간에서 1사분면뿐 아니라 4사분면으로 나누어진 2차원공간에서도 유효하다.

내 친구이자 나의 프로그래밍 스승인 쏭겐님께서 피타고라스의 정리를 이용해서 설명을 해주는데.

참 그넘 잘한다.ㅎㅎ

어쨌든 친구 덕분에 더욱 확고히 이해할 수 있었고 까먹기도 쉽지 않을정도가 되었다. (땡큐)


이대로 그냥 끝내면 재미없으니까 자바스크립트로 예제 코드를 한번 짜 보았다.

------------------------------------------------------------------------------------------------
function Point(x, y) {
	this.x = x || 0;
	this.y = y || 0;
}
Point.prototype.equals = function(point) {
	if (!point || point.constructor != Point) {
		return false;
	}
	
	return this.x === point.x && this.y === point.y;
}
Point.prototype.xPoint = function(x) {
	if (typeof x == "undefined") {
		return this.x;
	} else {
		this.x = x;
	}
}
Point.prototype.yPoint = function(y) {
	if (typeof y == "undefined") {
		return this.y;
	} else {
		this.y = y;
	}
}

먼저 위와 같은 2차원상에서의 좌표를 나타내는 객체를 하나 정의하고 이를 이용해 2차원상에서의

두 점간의 거리를 구하는 유클리디안 함수를 만들어 보면 아래와 같다.


function EuclideanDistance(point1, point2) {	
	return point1.equals(point2) ? 0 : 
		Math.sqrt(
			Math.abs(
				Math.pow(point1.xPoint() - point2.xPoint(), 2) +
				Math.pow(point1.yPoint() - point2.yPoint(), 2))
		);
}