三角関数
サイン、コサイン、タンジェント!
三角形の研究は測量や航海等に実際に役立ってきた分野です。主に直角三角形に関する比(sin, cos, tan)が基本なのですが、rpnはこれらの3つの関数をサポートしています。記述方法は以下のとおりです(値はラジアン)。
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のことなので、以下でもいいわけです。
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°からラジアンへの変換です。
45.1373 (答え:約45.1m)
角度を求めるには三角関数の逆関数が必要です。使い方は応用コーナーの角度計算なら逆三角関数にあります。興味のある方は閲覧ください。
次に、もう少し複雑な例を示してみましょう。
B地点とC地点の間の距離はわかっています。A地点とC地点の間の距離もわかっています。しかし、A地点からB地点までは、障害物があって測定できません(図2参照)。A地点からB地点までの距離を求めるにはどうすればよいでしょう。
.
. Y.
c . .
障害物 . a
. .
. .X. . . . . Z.
A b C
a=32.5Km、b=56.1Km、Z=60°
図2
この場合、A-B間の距離は余弦定理というものを使って求めることができます。余弦定理は以下で定義されます。ちょっと複雑ですね。
c = a + b - 2ab・cosZ
この式を使ってrpnで距離を求めてみます。なお、60°は先にラジアンに変換しておくことにします(60°は1.047197)。
48.7874 (答え:約48.8Km)
少々、複雑なので、公式と照らし合わせて解説しておきますね。
~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~
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プロンプトに戻るまでです。
これらを利用して、上の式を書き換えてみましょう。
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に格納して、物体の落下距
離を計算する式。
…………………………………………………………………………………………