目次
Turtle
前回、PythonのグラフィックスライブラリTurtleで長方形、正多角形、円の描き方を紹介しました。
【Turtle】長方形、正多角形、円の描き方[Python]
Turtle 前回、PythonのグラフィックスライブラリTurtleでペンの太さ、移動速度、ペンの色、塗りつぶしの色の変更の仕方を紹介しました。 今回は長方形、正多角形、円の…
今回は菱形、台形(平行四辺形)、星型、葉っぱ型の描き方を紹介します。
それでは始めていきましょう。
菱形
菱形は辺の長さは全て同じ、ある2辺が成す角をαとすると、向かい合う角もα、その他2つの角は180°-αとなる図形です。
import turtle
def diamond(a, alpha, clockwise=True):
if clockwise == True:
t.left(alpha/2)
t.forward(a)
t.right(alpha)
t.forward(a)
t.right(180-alpha)
t.forward(a)
t.right(alpha)
t.forward(a)
t.right(180-alpha)
elif clockwise == False:
t.left(180-alpha)
t.forward(a)
t.left(alpha)
t.forward(a)
t.left(180-alpha)
t.forward(a)
t.left(alpha)
t.forward(a)
t.right(alpha/2)
if __name__ == "__main__":
t = turtle.Turtle()
diamond(100, 30, True)
t.pencolor("Red")
diamond(100, 30, False)
turtle.done()
台形(平行四辺形)
台形は2辺が並行な四角形です。
そこで並行な2辺の長さ(aとc)、その間の1辺の長さ(b)、そして辺aと辺bで成す角αで示すことができます。
import turtle
def trapezoid(a, b, c, alpha, clockwise=True):
pos = t.position()
if clockwise == True:
t.forward(a)
t.right(alpha)
t.forward(b)
t.right(180-alpha)
t.forward(c)
t.setposition(pos)
t.right(180)
elif clockwise == False:
t.left(180)
t.forward(a)
t.left(alpha)
t.forward(b)
t.left(180-alpha)
t.forward(c)
t.setposition(pos)
t.left(180)
if __name__ == "__main__":
t = turtle.Turtle()
trapezoid(100, 50, 150, 45, True)
t.pencolor("Red")
trapezoid(200, 100, 150, 75, False)
turtle.done()
また台形でaとcの長さを同じにすると平行四辺形になります。
import turtle
def trapezoid(a, b, c, alpha, clockwise=True):
pos = t.position()
if clockwise == True:
t.forward(a)
t.right(alpha)
t.forward(b)
t.right(180-alpha)
t.forward(c)
t.setposition(pos)
t.right(180)
elif clockwise == False:
t.left(180)
t.forward(a)
t.left(alpha)
t.forward(b)
t.left(180-alpha)
t.forward(c)
t.setposition(pos)
t.left(180)
if __name__ == "__main__":
t = turtle.Turtle()
trapezoid(100, 50, 100, 45, True)
t.pencolor("Red")
trapezoid(200, 75, 200, 45, False)
turtle.done()
星型
星型は線が交差するものとしないものの2つを描くことができます。
交差する場合は線の長さを「l」として、一つの線を描く毎に144°回転させることで描くことができます。
import turtle
def star_cross(l, clockwise=True):
pos = t.position()
t.right(90)
if clockwise == True:
t.left(18)
for _ in range(5):
t.forward(l)
t.right(144)
t.left(72)
elif clockwise == False:
t.right(18)
for _ in range(5):
t.forward(l)
t.left(144)
t.right(72)
if __name__ == "__main__":
t = turtle.Turtle()
star_cross(100, True)
t.pencolor("Red")
star_cross(100, False)
turtle.done()
交差しない星型の場合は、辺の長さを「l」として、星の頂点は144°、その他の角は逆方向に72°回転させることで描くことができます。
import turtle
def star(l, clockwise=True):
pos = t.position()
t.right(90)
if clockwise == True:
t.left(18)
for i in range(10):
t.forward(l)
if i % 2 == 0:
t.left(72)
else:
t.right(144)
t.left(72)
elif clockwise == False:
t.right(18)
for i in range(10):
t.forward(l)
if i % 2 == 0:
t.right(72)
else:
t.left(144)
t.right(72)
if __name__ == "__main__":
t = turtle.Turtle()
star(100, True)
t.pencolor("Red")
star(100, False)
turtle.done()
葉っぱ型
葉っぱ型は、円を描く要領で円弧を描き、頂点で180°-描いた角度を回転させ、再度同じ長さの円弧を描くことで描くことができます。
import turtle
def leaf(l, step, angle, clockwise=True):
if clockwise == True:
t.left(90)
for _ in range(step):
t.forward(l)
t.right(angle)
t.right(180-step*angle)
for _ in range(step):
t.forward(l)
t.right(angle)
t.right(270-step*angle)
elif clockwise == False:
t.left(90)
for _ in range(step):
t.forward(l)
t.left(angle)
t.left(180-step*angle)
for _ in range(step):
t.forward(l)
t.left(angle)
t.left(90-step*angle)
if __name__ == "__main__":
t = turtle.Turtle()
leaf(10, 20, 5, True)
t.pencolor("Red")
leaf(50, 10, 7, False)
turtle.done()
だいぶ複雑な図形を描くことができるようになりました。
次回は再帰というテクニックを使って木を描いてみましょう。
【Turtle】再帰処理を使った木の描き方[Python]
Turtle 前回、PythonのグラフィックスライブラリTurtleで菱形、台形(平行四辺形)、星型、葉っぱ型の描き方を紹介しました。 今回は「再帰」と言われる処理を使って木…
ではでは今回はこんな感じで。
コメント