'21/06/13更新:クロソイド曲線の雛形コードを中程に追記しました。
本記事では、下図のように亀で絵を描く雛形コードを載せました。下図中の左側から、丸, 三角, 四角, 花柄模様はネット検索で出てくる基本事項です。一方、下図右側の赤線のsin波は、自作関数で(x, y)座標を指定することで描いています。
つまり、複雑な絵であっても、関数で定義できれば絵を描くことができます。その例として、クロソイド曲線の雛形コードを載せています。この場合、積分を使うため、Sympyも使用しています。
文末には本家サイトのデモスクリプトの使い方と例を載せました。
■基本操作の雛形コード
import turtle
import math
turtle.setup(width=1280, height=720, startx=None, starty=None)
turtle.penup()
turtle.setpos(-500, 0)
turtle.pendown()
turtle.shape('turtle')
turtle.color('black')
turtle.circle(50)
turtle.forward(150)
for i in range(3):
turtle.forward(100)
turtle.left(360 / 3)
turtle.forward(200)
for i in range(4):
turtle.forward(100)
turtle.right(90)
turtle.forward(200)
turtle.color('blue', 'yellow')
turtle.begin_fill()
for i in range(36):
turtle.speed(1 + i)
turtle.forward(200)
turtle.left(170)
turtle.end_fill()
turtle.speed(3)
turtle.forward(200)
turtle.color('red')
def f(x):
return (x/10) * math.sin(x/4)
a, b = turtle.pos()
for x in range(1000):
turtle.setpos(a + x, b + f(x))
turtle.done()
■クロソイド曲線
下図はクロソイド曲線です。時間tをループで回して関数に代入して、(x, y)座標を取得して亀を動かします。
import turtle
import sympy as sp
turtle.setup(width=640, height=360, startx=None, starty=None)
turtle.penup()
turtle.setpos(-150, -150)
turtle.pendown()
turtle.shape('turtle')
turtle.color('blue', 'red')
def clothoid_curve_func(t):
theta = sp.symbols('theta')
X = float(sp.integrate(sp.cos((theta ** 2) / 2), (theta, 0, t)))
Y = float(sp.integrate(sp.sin((theta ** 2) / 2), (theta, 0, t)))
return X, Y
turtle.speed(10)
a, b = turtle.pos()
for time in range(1000):
t = time/10
x, y = clothoid_curve_func(t)
turtle.setpos(a + x*200, b + y*200)
turtle.done()
下記リンクは、その動画です。
www.youtube.com
■さいごに、本家サイトの例題の使い方について
次のリンク先には、複雑な木の絵や時計の動きなどの例題コードがあります。https://docs.python.org/ja/3/library/turtle.html#module-turtledemo
それらを実行するには非常に簡潔で、次のコマンドを実行します。
python -m turtledemo
すると、下図のようなウィンドウが表示されます。メニューバーの左上のExamplesからいずれかを選択します。
下図は、「clock」を選択した場合の例です。左側にそのコードが記載され、右側でそれが動作します。
以上
<広告>
リンク