連載第3回では、算術演算子を用いて数値の計算をする例を取り上げたが、これから説明する数値演算関数を用いれば、もっと複雑な計算も可能になる。
三角形の面積を求める公式として、「1/2×(辺1の長さ)×(辺2の長さ)×sin(辺1、辺2に挟まれる角度)」というものがある。この公式を利用して三角形の面積を算出するには、Sin関数を用いればよい。Sin関数の引数に指定する角度の単位はラジアンである。従ってディグリー(度)から変換するには、π(≒3.14)/180をかける必要があるが、πはAtn関数(アークタンジェント)を使うことで求められる。
例えば、三角関数を使って次の三角形の面積を求めてみよう。
スクリプトは次のようになる。
Option Explicit
Dim dblPi,dblArea
dblPi = 4 * Atn(1) 'π(≒3.14)の正確な値を求める
dblArea = (1 / 2) * 5 * 7 * Sin(60 * dblPi / 180) '面積を求める
MsgBox "辺1=5cm、辺2=7cm、両辺の作る角が60°の三角形の面積は、" & dblArea & "平方cm"
実行結果は次のとおり。
このように、三角比を含むような数式も数値演算関数を使って求められる。変数の接頭辞dblは、倍精度浮動小数点数型(Double)といって、小数点以下の数値を含むデータ型に付ける変数名である。なお、Sin関数のほかにもCos、Tan関数や、平方根(√)を求めるSqr関数などがある。
先ほどの例の結果は小数点以下の数字が多く表示されて分かりづらい。そこで、少ない小数点のけた数で丸めるために用意されているのがRound関数である。先ほどの例の最後の行を次のようにしてみよう。
MsgBox "辺1=5cm、辺2=7cm、両辺の作る角が60°の三角形の面積は、" & Round(dblArea, 2) & "平方cm"
実行結果は次のようになる。
この例では、Round関数で小数点以下第2位までを表示するようにしている。
数値演算関数でほかによく使うものは、乱数を発生させるRnd関数であろう。乱数とは、取り出すたびに異なるようなランダム(無作為)な数値のことで、Rnd関数を使うと、0以上1未満の乱数を得ることができる。
Option Explicit
Randomize '乱数系列を初期化
Dim intMin, intMax
intMin = 1 '最小値
intMax = 100 '最大値
MsgBox "1〜100までのランダムな数→" & Int((intMax - intMin + 1) * Rnd + intMin) 'ランダムな値を表示
上記のスクリプトを3回実行してみた。このように、実行するたびにランダムな数値が得られる。
乱数は機械的に発生させるものだが、種(シード)と呼ばれる数値だけは指定しないと、いつも同じ乱数を発生させてしまう(逆にいえば、同じ種を指定することで、同じ乱数系列を取得できる)。そこでこのサンプルでは、Randomizeステートメントを使って、乱数の種をシステム・タイマーから取得して、乱数系列を初期化している。これで実行するたびに異なった乱数が発生するというわけである。
Rnd関数の戻り値に(最大値−最小値+1)をかけ、最小値を足すことで、最小値〜最大値の範囲のランダムな値を取得できるので覚えておこう。
なお、Rnd関数は引数に乱数系列を指定する値を取るが(詳しくはヘルプ参照)、引数を省略してもよい。このように引数がない関数を使うときは、( )を付けても付けなくてもよい。
上記スクリプトでは、最後に整数値に変換するためにInt関数を用いている。この関数は、小数値の整数部分を返す。
ここで例題を1つ出そう。虹の7色から今日のラッキーカラーをランダムに選ぶスクリプトを考える。文字列処理関数と数値演算関数の組み合わせがポイントとなる。
スクリプトの実行結果は次のとおり。
この例では、Mid関数の引数にRnd関数の戻り値を用いることで、文字列からランダムに文字列を取得している。このようにRnd関数はゲームなどに応用できる。ほかにもこれまでに登場した関数を組み合わせて、自分なりのゲームを考えてみるのも楽しいだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.