ให้ละติจูด / ลองจิจูดของสองจุดบนดวงจันทร์(lat1, lon1)
และ(lat2, lon2)
คำนวณระยะทางระหว่างจุดสองจุดในกิโลเมตรโดยใช้สูตรใด ๆที่ให้ผลลัพธ์เช่นเดียวกับสูตรแฮเวอร์ซีน
อินพุต
- ค่าจำนวนเต็มสี่ค่าเป็น
lat1, lon1, lat2, lon2
องศา (มุม) หรือ - ทศนิยมสี่ค่า
ϕ1, λ1, ϕ2, λ2
เป็นเรเดียน
เอาท์พุต
ระยะทางเป็นกิโลเมตรระหว่างจุดสองจุด (ทศนิยมด้วยความแม่นยำหรือจำนวนเต็มกลม)
สูตร Haversine
ที่ไหน
r
คือรัศมีของทรงกลม (สมมติว่ารัศมีของดวงจันทร์คือ 1737 กม.)ϕ1
ละติจูดของจุด 1 เป็นเรเดียนϕ2
ละติจูดของจุด 2 เป็นเรเดียนλ1
ลองจิจูดของจุดที่ 1 ในเรเดียนλ2
ลองจิจูดของจุด 2 เป็นเรเดียนd
คือระยะทางวงกลมระหว่างสองจุด
(ที่มา: https://en.wikipedia.org/wiki/Haversine_formula )
สูตรอื่น ๆ ที่เป็นไปได้
d = r * acos(sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1))
@milesสูตร 'd = r * acos(cos(ϕ1 - ϕ2) + cos ϕ1 cos ϕ2 (cos(λ2 - λ1) - 1))
@Neilสูตร 's
ตัวอย่างที่อินพุตเป็นองศาและเอาต์พุตเป็นจำนวนเต็มที่ปัดเศษ
42, 9, 50, 2 --> 284
50, 2, 42, 9 --> 284
4, -2, -2, 1 --> 203
77, 8, 77, 8 --> 0
10, 2, 88, 9 --> 2365
กฎระเบียบ
- อินพุตและเอาต์พุตจะได้รับในรูปแบบที่สะดวกใด ๆ
- ระบุในคำตอบไม่ว่าจะเป็นปัจจัยการผลิตที่อยู่ในองศาหรือเรเดียน
- ไม่จำเป็นต้องจัดการค่าละติจูด / ลองจิจูดที่ไม่ถูกต้อง
- ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
- หากเป็นไปได้โปรดรวมลิงค์ไปยังสภาพแวดล้อมการทดสอบออนไลน์เพื่อให้ผู้อื่นสามารถลองใช้รหัสของคุณได้!
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- นี่คือรหัส - กอล์ฟเพื่อให้ใช้กฎการตีกอล์ฟตามปกติและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ
d = r * acos( sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1) )
ที่r = 1737