2012-04-28 67 views
1

我正在尋找一種將小數轉換爲度數的方法。例如,C中的asin()函數返回一個十進制數,但我需要該數以°度爲單位分鐘秒」。將弧度轉換爲度,分和秒

例如,1.5將是1°30'0"

+0

這是一個C問題,而不是Objective-C問題。我已經編輯了它。 – 2012-04-28 04:29:24

回答

4

asin函數返回弧度。圓圈內有2π弧度。

有360度的圓圈,60度的度數和60秒的一分鐘。所以360 * 60 * 60秒在一個圓圈內。

double radians = asin(opposite/hypotenuse); 
int totalSeconds = (int)round(radians * 360 * 60 * 60/(2 * M_PI)); 
int seconds = totalSeconds % 60; 
int minutes = (totalSeconds/60) % 60; 
int degrees = totalSeconds/(60 * 60); 
+1

他仍然需要將其轉換爲DMS ,但好點! – hawkfalcon 2012-04-28 04:35:07

1

不知道如何用一個命令喜歡上了ti84> DMS做到這一點,但您可以使用邏輯。

  1. 度整個單元將保持不變(即,在121.135°
    經度,開始與121°)。
  2. 將小數乘以60(即.135 * 60 = 8.1)。

  3. 整數成爲分鐘(8')。

  4. 取剩餘的小數點後乘以60.(即.1 * 60 = 6)。

  5. 所得數成爲秒(6" )。秒可以保持作爲 小數。
  6. 取號碼您的三組,並把它們放在一起,使用 爲度(°),分鐘符號(」 )和秒( 「)(即 121°8'6」 經度) 來源: http://geography.about.com/library/howto/htdegrees.htm

搜索的一點點,我發現這個在C#: Converting from Decimal degrees to Degrees Minutes Seconds tenths.

double decimal_degrees; 

// set decimal_degrees value here 

double minutes = (decimal_degrees - Math.Floor(decimal_degrees)) * 60.0; 
double seconds = (minutes - Math.Floor(minutes)) * 60.0; 
double tenths = (seconds - Math.Floor(seconds)) * 10.0; 
// get rid of fractional part 
minutes = Math.Floor(minutes); 
seconds = Math.Floor(seconds); 
tenths = Math.Floor(tenths); 

但是正如他所說,它需要先從弧度轉換爲度數。

+0

是啊,我剛剛在http://geography.about.com/library/howto/htdegrees.htm上找到了答案..雖然答案很好:) – CoreCode 2012-04-28 05:41:33

+0

只是想幫助:) – hawkfalcon 2012-04-28 05:42:57