ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Euclidean Distance (유클리디안 거리)
    language/javascript 2010.04.11 00:41
    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))
    		);
    }
    


    댓글 2

Designed by Tistory.