2025年1月10日
018-1.SPIKEプライムPython入門-第9回「三角関数の使い方(その1)」
この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」を使ったPython(SPIKEアプリ)によるプログラミングの方法を紹介します。 Python(パイソン)はプログラミング言語の一つです。Pythonは教育や人工知能の研究など様々な分野で使われていて、人気があります。 Pythonの主な特徴はオブジェクト指向を採用していることです。オブジェクト指向というのはプログラムの機能をオブジェクトという単位で切り分けて扱う手法のことです。オブジェクト指向は複雑なプログラムを作る場合に効果を発揮します。(文/松原拓也)
◆ クラス内に関数を作る
今回は三角関数について紹介します。
三角関数はサイン、コサイン、タンジェントなどを求める関数のことです。これらの関数は円や角度の計算によく使います。どのようなことができるかについては、次回で詳しく紹介します。
三角関数を使うにはプログラムの最初の方に「from math import *」という記述が必要です。 これを書くと、三角関数や、それに関係する定数が使えるようになります。「math」はライブラリの名前です。 ここでは例として、円周率をライトマトリクスに表示してみましょう。 円周率は「pi」という変数に格納されていますので、それを参照するだけで表示できます。
プログラムを実行すると、ライトマトリクスに円周率が表示されます。
表示される円周率は「3.14159」です。実際には続きがありますが、ここでおしまいです。
サインやコサインが具体的にどのような値なのかは、表計算ソフトで見ることができます。 写真は「Open Office Calc」というフリーの表計算ソフトの実行画面です。これを使って、サインとコサインの値をグラフ表示することができます。 サインとコサインの値は「sin」「cos」関数で計算します。
見てのとおり、サインとコサインの範囲は-1.0~+1.0です。 グラフではY軸で描いています。そして、X軸の単位は「度」です。Y軸の値は360度ごとに同じ値を繰り返します。
サインとコサインはX軸が少しずれているだけで、波形は同じです。この「ずれ」の度合いを「位相」といいます。サインとコサインの位相の差は90度です。
それでは、Pythonでサインを求めてみましょう。
サインを求めるには「sin」という関数を使います。先ほどの表計算ソフトと同じです。 sin関数の書式は「sin(ラジアン)」です。引数のラジアンとは、180度=3.1415…とする独自の単位のことです。学校で習っていないという人も多いと思いますが、プログラムの世界ではラジアンはよく使います。角度からラジアンを算出するには「radians(角度)」という関数を使います。
このプログラムを実行すると、ライトマトリクスには「1」と表示されます。 表計算ソフトの結果を照らし合わせると、正しいことがわかります。 角度を色々変えて、値がどう変わるのか見てみましょう。
今度は、プログラムを「sin(rad)」→「cos(rad)」に書き換えてみましょう。 すると、「0」と表示されるべきところが「3.13916e-07」と表示されてしまいます。 これは間違いではなく、小数の計算ではよくあることなので、無視して構いません。「3.13916e-07」は、物凄く「0」に近い値です。
◆ オリジナルの三角関数を作る
今度はサイン関数とコサインの関数を自分で作ってみましょう。
同じものを作っても仕方ないので、内容をアレンジします。こちらはサイン・コサインの値を100倍して、整数で引数を返すようにします。
プログラムの先頭にあるのがテーブル(配列)です。ここにサインの値を格納します。 1度ずつ値を用意するのは大変なので、10度ずつに減らしています。
サインのテーブルの値は表計算ソフトを使って作成しています。
扱いやすいように値を整数化しています。 値を100倍して小数点を切り捨てます。
サインとコサインは90度 位相が違うだけで値は同じです。 そのため、コサインのテーブルは必要としません。
プログラムを実行すると、このように線のようなものが表示されました。
これは一体なんでしょうか?
この線は円を90度だけ描いたものです。円弧といいます。
ライトマトリクスの座標(0,0)を中心として、半径4の円弧を描いています。
全く円弧に見えないと思いますが、ライトマトリクスの画素数が5×5個しかないためです。
プログラムを修正することによって、円弧の角度や半径を変更することができます。
次回には三角関数を使ったロボットのプログラムを紹介します。
今回作成したプログラム(SPIKEアプリ用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。