2014-11-20 26 views
5

Tôi cần chọn phạm vi từ 0 đến 359,9 độ trong cơ sở dữ liệu SQL.Cách tốt nhất để xử lý phạm vi 360 độ

Vị trí đặt của tôi ở dạng góc trung tâm và một dải. Ví dụ: center = 100 range = 50 sẽ cho tôi phạm vi góc> 75 góc < 125. Tuy nhiên nếu center = 0, thì phạm vi sẽ là góc < 25 và góc> 335.

Như vậy thuật toán hiện tại của tôi làm việc như thế này:

minangle = center-range/2 
maxangle = center+range/2 
if minangle<0, then minangle += 360 
if maxangle>0, then maxangle -=360 

Sau đó, trong truy vấn của tôi

if minangle<maxangle, I query angle>minangle AND angle<maxangle 
if minangle>maxangle, I query angle>minangle OR angle<maxangle 

Cách tiếp cận này có vẻ là một chút phức tạp. Có cách tiếp cận tốt hơn không?

+2

sử dụng phép toán modulo. '(góc + dải)% 360'. phần còn lại sẽ là góc 0-> 360 thích hợp. –

+1

http://stackoverflow.com/questions/9138790/cant-use-modulus-on-doubles. Đối với phao và tăng gấp đôi sử dụng fmod. –

+0

Điều đó giúp với logic +360 -360. Tôi đã thực sự hy vọng có một số cách để tránh (minangle> maxangle) và thay đổi từ và sang hoặc logic – eng3

Trả lời

0

Thay đổi phạm vi góc thành 0-720. Luôn giữ minAngle < maxAngle.

nếu (tối thiểu) tối đa max + = 360;

minAngle = 50, maxAngle = 200; => ok

minAngle = 200, maxAngle = 50; => minAngle = 200, maxAngle = 360 + 50 = 410; => ok

mặc dù điều này làm tăng sự phức tạp của bạn.

+0

Tôi không thể thay đổi phạm vi góc, đó là đầu vào tôi đang tìm kiếm. Và có, nó làm tăng sự phức tạp. Có lẽ không có cách nào phức tạp hơn. – eng3

Các vấn đề liên quan