각 객체가 점의 좌표를 나타내는 x와 y라는 두 개의 속성을 가진 객체 배열이 있다고 가정해 봅시다. 우리는 이 배열과 특정 점의 x, y 좌표를 담은 객체를 인자로 받아, 배열 안의 점들을 주어진 점으로부터의 거리(가까운 순에서 먼 순으로)에 따라 정렬하는 함수를 작성해야 합니다.
거리 공식
거리 공식은 2차원 평면 위의 두 점 (x1, y1)과 (x2, y2) 사이의 최단 거리를 구하는 수학적 공식입니다.
$S=\sqrt{((x2-x1)^2+(y2-y1)^2)}$
우리는 이 공식을 활용하여 각 점이 주어진 점으로부터 얼마나 떨어져 있는지 계산하고, 그 결과를 기준으로 배열을 정렬할 것입니다.
예제 코드
const coordinates =
[{x:2,y:6},{x:14,y:10},{x:7,y:10},{x:11,y:6},{x:6,y:2}];
const distance = (coor1, coor2) => {
const x = coor2.x - coor1.x;
const y = coor2.y - coor1.y;
return Math.sqrt((x*x) + (y*y));
};
const sortByDistance = (coordinates, point) => {
const sorter = (a, b) => distance(a, point) - distance(b, point);
coordinates.sort(sorter);
};
sortByDistance(coordinates, {x: 5, y: 4});
console.log(coordinates);코드 설명
distance 함수는 유클리드 거리 공식을 사용하여 두 좌표점 사이의 직선 거리를 계산합니다. sortByDistance 함수는 JavaScript 배열의 내장 메서드인 sort()에 비교 함수를 전달하여, 각 점을 기준 점까지의 거리 차이를 기준으로 오름차순 정렬합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[
{ x: 6, y: 2 },
{ x: 2, y: 6 },
{ x: 7, y: 10 },
{ x: 11, y: 6 },
{ x: 14, y: 10 }
]결과를 확인해 보면 실제로 올바른 순서로 정렬된 것을 알 수 있습니다. 즉, (6, 2)가 기준점 (5, 4)에 가장 가깝고, 그다음으로 (2, 6), (7, 10) 순서로 멀어집니다.