2010-07-06 41 views

回答

5

像這樣:

double coord = 59.345235; 
int sec = (int)Math.Round(coord * 3600); 
int deg = sec/3600; 
sec = Math.Abs(sec % 3600); 
int min = sec/60; 
sec %= 60; 

編輯:新增的ABS呼叫,使其適用於負角度也。

2

我從你的問題推斷,你想從笛卡爾轉換爲極座標。

如果是這種情況,則需要的基本公式是:

R =√(X2 + Y2)

θ= ATAN(Y/X)

在哪裏r是距離,θ是從x = 0(大約原點)的角度

這是否有幫助?

3

你可以使用入庫時間:(棘手,但它的工作原理)

double coord = 123.312312; 
    var ts = TimeSpan.FromHours(Math.Abs(coord)) 
    int degrees = Math.Sign(coord) * Math.Floor(ts.TotalHours); 
    int minutes = ts.Minutes; 
    int seconds = ts.Seconds; 
+0

Interresting,但因爲它不是在所有的時間它可能是一個有點混亂...而且它不會爲負角度的工作... – Guffa 2010-07-06 15:53:51

+0

@Guffa,我同意!這是一個'wtf ?? !!'確定..但很好奇和照亮,因爲它說明(並利用)兩個數據結構之間的並行。 (固定它來處理底片) – 2010-07-06 16:45:45

1

我想出了以下內容。它可以正確處理負座標(南緯或西經),並返回未被嚴格分爲幾分或幾秒的餘數(以度爲單位)。

public static double ConvertDecimalToDegMinSec(double value, out int deg, out int min, out int sec) 
{ 
    deg = (int)value; 
    value = Math.Abs(value - deg); 
    min = (int)(value * 60); 
    value = value - (double)min/60; 
    sec = (int)(value * 3600); 
    value = value - (double)sec/3600; 
    return value; 
} 
相關問題