札幌日大中高一貫ロボット部 「非公式」ブログ

札幌日大中高一貫ロボット部の「非公式」ブログです!

ちょっとしたPythonコード

こんにちは。ONCです。
この前の、全方位ミラーの3Dモデルを作った記事で、gnuplotで出した座標をOpenSCADに入力するのにとても手間取った、ということを書いたかと思います。
そこで今回は、ちょっとしたPythonコードを書くことで面倒くさい作業を自動化しました。私は、Pythonを書くのは初めてだったのでちょうど良い練習になりました。

取り敢えず、コードを乗っけます。

import math

r = float(input("set Hyperbola parameter : radius(mm) >"))
theta = float(input("set Hyperbola parameter : angle of view(degrees) >"))

a = (r/(2*math.tan(math.radians(theta/2))))*(r/(2*math.tan(math.radians(theta/2))))/(1+((math.tan(math.radians(45-(theta/4))))/(2*math.tan(math.radians(theta/2)))))
b = (r/(2*math.tan(math.radians(theta/2))))*(r/(2*math.tan(math.radians(theta/2)))) - a

for step in range(101):
	
	x = step * r * 0.01
	y = math.sqrt((b/a)*(x*x)+b)
	print('[%f,%f],' %(x,y))

Pythonなので、環境さえあればおそらくどのOSでも動くかと思います。
実行すると最初に、作りたいミラーの半径の設定が出てきます。アクリルパイプなどの直径を打ち込むことにあるでしょう。その次に、対象となるカメラの画角を入力するように求められます。これはPixyの場合は、47°になります。
両方とも入力してエンターを押すと、下の画像のように、座標がズラズラと出てきます。
f:id:snjrc:20190727090842p:plain
前はgnuplotで双曲線の関数を入力し、座標をテキストファイルに出力してそれをいちいち打ち込んでいましたが、この座標の出力のされ方であれば、
OpenSCADにx座標とy座標を打ち込まなくても済みます。これで、双曲線関数を求める面倒くさい計算からも開放されますし、座標を入力することも省略できます。
ただ注意しないといけないのは、最後の座標にもコンマがついているため、そこだけ消さないといけません。

3Dモデルの作り方自体は、前回の記事でOpenSCADの使い方を紹介しているので、それを参考にしてくれると良いです。