2024年11月21日
008-1.EV3ソフトウェア入門-第6回「三角関数の使い方1」
新シリーズのレゴマインドストームである「教育用レゴマインドストームEV3」を使ったプログラミング環境「EV3ソフトウェア」について紹介していきたいと思います。(文/松原拓也)
◆ sin関数とcos関数
今回は「三角関数」を使ったプログラムについて紹介したいと思います。
三角関数というのは、直角を含んだ三角形を使って辺の長さや角度を計算する関数のことです。三角関数については、高校の数学の授業で習うと思います。
EV3ソフトウェアでは三角関数のうち「sin(サイン)」「cos(コサイン)」といった関数を使うことができます。このsinやcosを使った計算はEV3ソフトウェアから新しく登場した(NXTソフトウェアには無かった)機能です。
sin関数もcos関数も引数は「角度」です。戻り値は-1~-1の範囲で変化します。グラフが「波」の形をしていますが、360度で元の値に戻っていて、以後繰り返しになっています。
sin関数を使ったプログラムを作ってみました(ファイル名はsin1.ev3)。
プログラムの作り方としては、 まず「数学」ブロックを置き、ポップアップメニューで「拡張機能」を選択します。そして、ブロック内のテキストボックスに次の数式を入力します。
sin(a)*50+60
これはsin関数にaという引数を入れて呼び出し、その答えを50倍してから、60を足すという意味です。最終的に答えは点を描くさいのY座標に割り振っています。そして、引数のaをX座標に割り振っています。
プログラムを実行すると、写真のようなグラフが描かれました。
これがsin関数のグラフです。意味についてはあとで説明しますので、次はcos関数を使ってみましょう。
コサイン(cos)関数を使ったプログラムを作ってみました(ファイル名はsin2.ev3)。計算式以外は先ほどのsin関数のプログラムと同じです。 数学ブロックの数式は次のとおりです。
cos(a)*50+60
これはcos関数にaという引数を入れて呼び出し、その答えを50倍してから、60を足すという意味です。
実行結果です。これがcos関数のグラフです。
どうしてこのようなグラフが描かれたのか、その理由については次のページで紹介します。
◆ サインカーブ
まずEV3の表示機能についてのおさらいをしてみましょう。 インテリジェントブロックEV3のディスプレイは幅178ピクセル×高さ128ピクセルの解像度を持っています。 X座標は0~177の範囲で指定することができます。Y座標の範囲は0~127です。
先に紹介した2つのプログラムには「関数(角度)*50+60」という計算を行っていました。「60」がグラフのY座標、「50」が波の高さを表しています。つまり、この計算によって、画面のだいたい真ん中にグラフを描くことができるわけです。
表示結果と一番最初に紹介したsinとcosのグラフに当てはめてみましょう。
X方向の0~177の値を関数の「角度」に割り振っていますので、 ディスプレイに描かれたのは、この緑色のワクで囲んだ部分ということになります。 通常、数学のグラフはプラス方向が上向きに描かれますが、ディスプレイ上ではプラス方向は下向きになります。そのため、上下がひっくり返って描かれています。
sinとcosの特徴が分かりましたでしょうか?このsinで描かれるカーブのことを「サイン波」または「正弦波」と呼びます。
◆ 半円を描く
続いて、cos関数とsin関数を組み合わせたプログラムを作ってみました(ファイル名はsin3.ev3)。
cos関数の計算結果を表示ブロック(点を描く)のX座標につなぎ、 sin関数の計算結果をY座標につなぎました。
プログラムを実行した様子です。ディスプレイにほぼ半円が描かれました。
半円である理由は、プログラムのループ回数を178回(0~177の範囲)に設定しているためです。
このループ回数を変更すると、その角度の円弧を描くことができます。たとえば、ループ回数を360回にすると、360=1周なので完全な円を描くことができます。
◆ 円を描くように動かす
先ほどのプログラムを改造して、円の動きを連続してみることができるプログラムを作ってみました(ファイル名はsin4.ev3)。
プログラムが大きくなってしまいましたので、詳しい処理内容についてはEV3ソフトウェアを使って参照してください。
プログラムを実行した様子です。黒くぬりつぶした円がグルグルと中心を軸にして時計方向に回ります。左上の数字は中心から見た円の角度です。 角度を10度ずつ増えていき、360度になると0度に戻ります。
ちなみに円の回転する速度は0.2秒ごとに10度にしています。 これは、0.1秒ごとに5度にしても同じ速度なのですが、 それだとディスプレイの残像が出すぎて見づらいので、 カクカクした設定にしています。
プログラムを部分的に拡大してみました。 円の動きを決定しているのが、この2つの数学ブロック内の数式です。
このプログラムでは楕円を描くように円が回転していますが、 軌道のX方向の半径は60ピクセルで、Y方向の半径は40ピクセルです。 回転する中心の座標は(90,60)です。 この円の軌道を決定しているのが、2つの数式です。
cos(a)*60+90
sin(a)*40+60
このパラメータを変更すると、円の軌道を自在に変えることができます。変更して確認してみましょう。
これで、sin関数やcos関数の使い方はだいたい理解できたと思います。次はこれをロボットの制御に応用してみたいと思います。
[DOWNLOAD]今回作成したプログラム(教育用EV3ソフトウェア用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。