2012-04-28 11 views
1

私はCで小数点以下を変換する方法を探しています。例えば、Cのasin()関数は10進数を返しますが、分秒ラジアンを度、分、秒に変換する

+0

これはObjective-Cの質問ではなく、Cの質問です。私はそれに応じてそれを編集しました。 –

答えて

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

1

ないti84上> DMSのような1つのコマンドでこれを行う方法を確認してください」。

例えば1.5は、1°30'0" だろうが、あなたは、ロジックを使用することができます。

  1. 度の全体の単位は(121°で始まり、すなわち121.135°
    経度に)同じままです。
  2. 小数に60を掛けます(つまり.135 * 60 = 8.1)。

  3. 整数は分(8 ')になります。

  4. 残りの10進数をとり、60を掛けます(つまり、1 * 60 = 6)。

  5. 結果の数は秒(6" )になります。秒が 小数として残すことができる。
  6. は「数字のあなたの3セットを取り、それらを一緒に入れて、度のため 記号(°)を使用して、分( )、および秒( ")(すなわち 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

+0

ただ助けてくれるようにしてね:) – hawkfalcon

関連する問題