2016-03-16 111 views
-2

我計算了兩個座標之間的距離和他們之間的角度使用harvesine公式,我想獲得指南針的方向但我有問題,我發現這個代碼來獲取方向,但我不能得到指數。 請幫助修復此部分獲取指南針方向在c

int degree = 30; 

char cordNames [] = {'N', 'NE', 'E', 'SE"]', 'S', 'SW', 'W', 'NW', 'N'}; 
int coordinateIndex = floor(((degree-22.5)%360)/45); 

if(coordinateIndex <0) 
{ 
    coordinateIndex=coordinateIndex+8; 
} 

result = directions[index+1]; 
+0

它是[「Haversine」公式](http://en.wikipedia.org/wiki/Haversine_formula)。你究竟遇到了什麼問題?你是否收到編譯器錯誤或怪異的運行時錯誤或執行不正確......? – RastaJedi

+0

請發佈[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve),例如我會知道更多關於'result'和'directions'類型的信息。我也不認爲你是'SE']''應該是這樣嗎?我接受了這個錯字? – RastaJedi

回答

1

這裏有各種各樣的錯誤。您引用的result,directionsindex,它們從未被定義;你不能有兩個字母字符變量,你必須使用C風格字符串(字符數組),即一個陣列內的陣列基本上,例如:

const char *coord_names[] = { "N", "NE", "E", "SE", "S", "SW", "W", "NW", "N" }; 

此外,在您的線路int coordinate_index = floor(((degree - 22.5) % 360)/45);,這是不正確C和不會編譯; %模運算符僅用於整數;您的degree - 22.5會自動返回一個雙倍數,所以您必須使用fmod()函數來代替或投射,或者使用底層函數或類似的東西(您很可能想要fmod()雖然??我不確定)degree - 22.5

當然,我敢肯定,你已經#include荷蘭國際集團<math.h>,但只要確保你不要忘記-lm還鏈接鏈接到數學庫(爲floor(),如果您選擇使用fmod())。