1

C で小数を度に変換する方法を探しています。たとえば、C の asin() 関数は 10 進数を返しますが、その数値は度 ° 分 ' 秒 ".

たとえば、1.5 は 1°30'0" になります。

4

2 に答える 2

4

このasin関数はラジアンを返します。円には 2 π ラジアンがあります。

円は 360 度、1 度は 60 分、1 分間は 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);
于 2012-04-28T04:32:37.507 に答える
1

ti84の>dmsのような1つのコマンドでこれを行う方法はわかりませんが、ロジックを使用できます。

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

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

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

  5. 結果の数値は秒(6 ")になります。秒は小数のままにすることができます。
  6. 3セットの数値を取得し、度(°)、分(')、および秒( ")(つまり、経度121°8'6")の記号を使用してそれらをまとめます。出典: http://geography.about。 com / library / howto / htdegrees.htm

少し検索すると、これはc#で見つかりました: 10進角から10分分秒10分の1への変換。

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);

しかし、彼が言ったように、それは最初にラジアンから度に変換される必要があるでしょう。

于 2012-04-28T04:26:41.053 に答える