Nếu ngôn ngữ lập trình bạn đang sử dụng hỗ trợ toán tử% (mod) trên các số dấu phẩy động (như Python và Ruby), tôi khuyên bạn nên sử dụng ngôn ngữ đó. Mặt khác, một số ngôn ngữ khác (như C và C ++) cho phép bạn sử dụng fmod ().
(Dù bạn sử dụng toán tử mod nào, hãy đảm bảo trước rằng nó sẽ thực hiện các thao tác mod trên các số dấu phẩy động và nó sẽ luôn cung cấp cho bạn các câu trả lời không âm. điểm lat / lon không đúng.)
Sử dụng nó như thế này:
# Put the longitude in the range of [0,360):
longitude %= 360
# Put the longitude in the range of [-180,180):
if longitude >= 180:
longitude -= 360
Nếu bạn muốn làm tất cả trong một dòng:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Các phương pháp này không có vòng lặp, vì vậy chúng sẽ bình thường hóa các giá trị kinh độ mà không cần phải lặp lại cộng hoặc trừ, bất kể số lần quan sát của bạn đã xoay quanh trái đất bao nhiêu lần.
Biên tập:
Hmmm ... Tôi chỉ nhận thấy rằng Javascript dường như không xử lý %
với các giá trị âm như tôi nghĩ nó sẽ xảy ra.
Trong trường hợp đó, hãy thử một lớp lót này:
longitude = (longitude + 36180) % 360 - 180
Các 36180
chúng ta đang thêm là 36.000 + 180. Các 36.000 là để di chuyển một giá trị âm vào lĩnh vực tích cực, và 180 là để chuyển nó qua để khi nó được modded của 360
, nó sẽ nằm trong khoảng [0360) . Phần này - 180
chuyển nó trở lại phạm vi [-180,180).
Đây là một lớp lót khác, một lớp không dựa vào 36.000 là đủ lớn:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
Phần longitude % 360 + 360
này sẽ đảm bảo giá trị nằm trong miền dương khi được sửa đổi sau này 360
. Bộ + 180
phận này sẽ dịch chuyển nó để sau này bị trừ 180 (với - 180
), nó sẽ nằm trong phạm vi mong muốn là [-180,180).