JavaScript로 랜드마크와 특정 물체 간 거리 계산하기
주어진 정보
- 랜드마크(기준점)의 좌표: 위도(lat), 경도(lon), 고도(alt)
- 물체의 방위각(Azimuth Angle, θ): 북쪽(0°) 기준 시계 방향
- 물체의 고도각(Elevation Angle, ϕ): 수평선(0°) 기준 위쪽 방향
- 물체의 고도(alt_object) (알려진 경우)
1. 거리 계산 방법
(1) 물체의 고도가 알려진 경우
삼각법을 이용하여 랜드마크와 물체 간의 거리 DD를 계산할 수 있습니다.
D=alt_object−alt_landmarktan(elevation)D = \frac{alt\_object - alt\_landmark}{\tan(elevation)}
여기서:
- alt_landmarkalt\_landmark = 랜드마크의 고도 (m)
- alt_objectalt\_object = 물체의 고도 (m)
- elevationelevation = 고도각(°)
(2) 물체의 고도가 알려지지 않은 경우
- 물체가 지면(고도 0m)에 있다고 가정하면:
D=alt_landmarktan(elevation)D = \frac{alt\_landmark}{\tan(elevation)}
2. JavaScript 코드 구현
1) 물체의 고도가 주어진 경우
function calculateDistance(altLandmark, altObject, elevationAngle) {
// 각도를 라디안으로 변환
let elevationRad = elevationAngle * (Math.PI / 180);
// 거리 D 계산
let D = Math.abs((altObject - altLandmark) / Math.tan(elevationRad));
return D;
}
// 예제 입력
let altLandmark = 50; // 랜드마크 고도 (m)
let altObject = 100; // 물체 고도 (m)
let elevationAngle = 30; // 고도각 (°)
let distance = calculateDistance(altLandmark, altObject, elevationAngle);
console.log(`랜드마크와 물체 간 거리: ${distance.toFixed(2)} m`);
2) 물체의 고도가 알려지지 않은 경우 (지면 기준)
function calculateDistanceToGround(altLandmark, elevationAngle) {
let elevationRad = elevationAngle * (Math.PI / 180);
let D = Math.abs(altLandmark / Math.tan(elevationRad));
return D;
}
// 예제 입력
let altLandmark2 = 50; // 랜드마크 고도 (m)
let elevationAngle2 = 45; // 고도각 (°)
let distance2 = calculateDistanceToGround(altLandmark2, elevationAngle2);
console.log(`지표면 기준 거리: ${distance2.toFixed(2)} m`);
3. 실행 예제
1) 물체의 고도가 있는 경우
입력:
calculateDistance(50, 100, 30);
출력:
랜드마크와 물체 간 거리: 86.60 m
2) 물체가 지면(고도 0m)에 있는 경우
입력:
calculateDistanceToGround(50, 45);
출력:
지표면 기준 거리: 50.00 m
4. 결론
- 물체의 고도가 주어지면 삼각함수를 사용하여 정확한 거리 계산 가능.
- 고도가 없으면 지면(고도 0m) 기준으로 거리 계산 가능.
- JavaScript를 이용하여 웹에서 실시간 거리 계산 가능 (예: 지도 API, 감시 시스템, 드론 추적 등). 🚀
'북마크 > Q&A' 카테고리의 다른 글
SSH 로그인 시 특정 폴더만 접근할 수 있는 계정 생성 (0) | 2025.02.04 |
---|---|
Node.js와 MongoDB 연동 (0) | 2025.02.04 |
랜드마크를 기준으로 Azimuth Angle과 Elevation Angle을 이용한 거리 계산 (0) | 2025.02.04 |
댓글