三角関数 | rpn入門(初級編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | rpn入門 | rpnの使い方を基本から応用まできちんと学習。

HOME > 講座 > rpn入門 > 初級編 > 三角関数

hatena twitter facebook rss ソーシャルブックマーク

三角関数

サイン、コサイン、タンジェント!

 三角形の研究は測量や航海等に実際に役立ってきた分野です。主に直角三角形に関する比(sin, cos, tan)が基本なのですが、rpnはこれらの3つの関数をサポートしています。記述方法は以下のとおりです(値はラジアン)。

  >rpn 1.57 s    ⇒ sin(1.57)
  1
  >rpn 1.57 c    ⇒ cos(1.57)
  0.000796327
  >rpn 1.57 t    ⇒ tan(1.57)
  1255.77


ラジアンは角度の単位です。ただし、小学で学ぶ分度器の一回り360°が2πに対応します。すると、180°がπ。90°が1/πになりますね。ちなみに上の例の1.57は3.14の2分の1です。つまり、π/2のことなので、以下でもいいわけです。

  >rpn 3.14 2 / s
  1


情報rpnでは、「3 2 +」等と同様に、「1.57 s」の式も「オペランドを先にオペコードを後に」という逆ポーランド記法の原則に従って設計されています。それに対して、市販の関数電卓では通常の計算は「3 + 2」の中置記法、三角関数の計算は「1.57 sin」の後置記法というように式の並びは必ずしも一致していません。

役に立つ三角関数

 では、例題を示して、三角関数を使ってみましょう。

今、目の前に大きな木が立っているとします。高さを測りたいのですが、高すぎて上れません。しかし、現地点から木までの水平距離はわかっているし、木の頂上までの角度もわかっています(図1参照)。木の高さを求めることはできないでしょうか。

                 .|/
               .///
             . / /|//
           .    //// /
         .     ////// /
       .       / //// 
     . ) θ       |
  ----------------------
     A            B

  A-B間=24m、角度θ=62°
            図1


この場合、木の高さを求めるには、以下のようにします。ちなみに「62 3.14159 * 180 /」は62°からラジアンへの変換です。

  >rpn 24 62 3.14159 * 180 / t *
  45.1373     (答え:約45.1m)


情報角度を求めるには三角関数の逆関数が必要です。使い方は応用コーナー角度計算なら逆三角関数にあります。興味のある方は閲覧ください。

次に、もう少し複雑な例を示してみましょう。

B地点とC地点の間の距離はわかっています。A地点とC地点の間の距離もわかっています。しかし、A地点からB地点までは、障害物があって測定できません(図2参照)。A地点からB地点までの距離を求めるにはどうすればよいでしょう。

                  B
                  .
                . Y.
            c .     .
         障害物      . a
          .           .
        . .X. . . . . Z.
       A        b      C

  a=32.5Km、b=56.1Km、Z=60°
               図2


この場合、A-B間の距離は余弦定理というものを使って求めることができます。余弦定理は以下で定義されます。ちょっと複雑ですね。

    2     2     2
  c = a + b  - 2ab・cosZ


この式を使ってrpnで距離を求めてみます。なお、60°は先にラジアンに変換しておくことにします(60°は1.047197)。

  >rpn 32.5 32.5 * 56.1 56.1 * + 2 32.5 * 56.1 * 1.047197 c * - r
  48.7874     (答え:約48.8Km)


少々、複雑なので、公式と照らし合わせて解説しておきますね。

  >rpn 32.5 32.5 * 56.1 56.1 * + 2 32.5 * 56.1 * 1.047197 c * - r
        ~~~~~~~~~~~ ~~~~~~~~~~~   ~~~~~~~~~~~~    ~~~~~~~~~~
              2          2
            a         b            2ab       cos(60°)


rpnでプログラミング

 さて、最後の余弦定理の逆ポーランド式ですが、式が長いことに加えて数値がたくさん出てくるので入力を間違えやすく、その場限りで汎用性に乏しいです。そこで、rpnは入力をサポートし、汎用性を高める、いくつかの機能を用意しています。ここではその内の2つを紹介します。

1つ目は最後の数値をコピーするもので、「.」を使用します。例えば、「rpn 3.14159 3.14159 *」は「rpn 3.14159 . *」と記述できます。これで、長い数字を二回入力することを避けられます。

2つ目はレジスタと呼ばれるメモリ(記憶場所)です。a~zまでとA~Zまでの52個あります。例えば、pレジスタへの数値記憶は「3.14159 #p」で表現されます。一度メモリに格納すると、その後は@pで3.14159を参照できます。pレジスタの有効範囲はrpnの処理が全て終わって、DOSプロンプトに戻るまでです。

これらを利用して、上の式を書き換えてみましょう。

  >rpn 32.5 56.1 1.047197 #z #b #a @a . * @b . * + 2 @a * @b * @z c * - r
  48.7874


このように記述できます。一見、より複雑になったように思えますが、レジスタを変数とみなすことで汎用性のある数式にすることができます。

例えば、式の始めにある「32.5, 56.1, 1.047197」の定数は式とは独立しています。つまり、余弦定理の数式を「@a . * @b . * + 2 @a * @b * @z c * - r」にまとめ上げることが可能だということです。これは、一種のプログラミングとも言えます。

『今回の問題』………………………………………………………………………
  以下を逆ポーランド記法式に変換せよ。
  (1)  消費税率0.05をレジスタzに格納する式。
  (2)  消費税率0.05をレジスタzに格納し、1030円の税込金額を計算する式。
  (3)  重力定数9.8と時間3.5秒をレジスタgとtに格納して、物体の落下距
       離を計算する式。
…………………………………………………………………………………………

答えはこちらLinkIcon

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。