2014-02-28 56 views
0

我有兩個羅盤方位(0-360度):比較兩個羅盤方位

var routeDirection = 28 
var windDirection = 289 

我需要這些軸​​承比較,以確定是否騎手是會得到一個

一)橫風

b)中順風

c)中頭風

我試圖便利着想rting的軸承羅盤方向,如:

var compass = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N']; 
    var windDirection = compass[Math.round(bearing/22.5)]; 

,然後做一個基本的字符串比較:

if (routeDirection=='N') && (windDirection=='S') { 
output = 'Headwind' 
} 

但很明顯,這是冗長而低效...

+0

你可以添加一些關於你想要的結果的更多信息嗎?例如。風向如何與路線方向相匹配才能顯示逆風?在22.5度內? – Mathias

+0

是的,22.5度會很好。我有一個風速變量,我將用它來說強大的頭部翅膀,輕微的尾風等。 – user1059511

回答

1

我會做直接比較的路線方向和風向之間,並確定風的基礎上,區別類型:

if(routeDirection > windDirection) 
    var difference = routeDirection - windDirection; 
else 
    var difference = windDirection - routeDirection; 

// left/right not important, so only need parallel (0) or antiparallel (180) 
difference = difference - 180; 
//keep value positive for comparison check 
if(difference < 0) 
    difference = difference * -1; 

if(difference <= 45) // wind going in roughly the same direction, up to you and your requirements 
    output = "headwind"; 
elseif(difference <= 135) // cross wind 
    output = "crosswind"; 
elseif (difference <= 180) 
    output = "tailwind"; 
else 
    output = "something has gone wrong with the calculation..."; 

上述計算意味着你不能在每個指南針點進行比較,只有相對船頭和風的區別,減少了詳細程度。它還允許通過使用較小程度的步驟和添加更多的elseif來進行多角度比較。這也可以用switch()來完成,但會出現類似的代碼行數。

+0

謝謝,這個作品會幫我。這也使得添加更多變體更容易 – user1059511

+0

如果這是您接受的答案,它可以幫助您勾選「接受答案」按鈕(看起來像投票值旁邊的勾號)。 –

+0

對不起,我收到了相反的結果e。如果我騎着西風,風向是東風,它應該作爲逆風返回,但它會作爲順風返回。看到這裏:http://codepen.io/anon/pen/luIxj – user1059511

1

假設你要去直線上升,你會有這個:

\ Head wind/
\  /
    \  /
    \ |/
    \ |/
Cross\|/Winds 
    /\ 
    / \ 
/ \ 
/  \ 
/  \ 
/Tail wind \ 

所以基本上...首先你旋轉你的點o F觀看讓你在軸承0旅行:

var adjustedWindDirection = windDirection - routeDirection; 

當然,軸承應在範圍0-360,因此再次調整:

adjustedWindDirection = (adjustedWindDirection+360)%360; 

現在,我們需要弄清楚哪個象限的方向是:

var quadrant = Math.round((adjustedWindDirection-45)/90); 

最後:

var winds = ["head","cross (left)","tail","cross (right)"]; 
var resultingWind = winds[quadrant]; 

完成!

+0

謝謝,很好解釋。然而,當它應該是頭風的時候,我會得到相反的結果,例如尾巴。看到這裏:http://codepen.io/anon/pen/mkbgA – user1059511