【Turtle】長方形、正多角形、円の描き方[Python]

  • URLをコピーしました!
目次

Turtle

前回、PythonのグラフィックスライブラリTurtleでペンの太さ、移動速度、ペンの色、塗りつぶしの色の変更の仕方を紹介しました。

今回は長方形、正多角形、円の描き方を紹介します。

それでは始めていきましょう。

長方形

長方形は向かい合った辺の長さが同じで隣り合う辺の角度が全て90度のものです。

そのため2つの辺の長さを定義すれば、長方形を描くことができます。

描く順番を時計回りと反時計回りの2種類を用意してみたのがこちらです。

import turtle

def square(a, b, clockwise=True):
    if clockwise == True:
        t.forward(a)
        t.right(90)
        t.forward(b)
        t.right(90)
        t.forward(a)
        t.right(90)
        t.forward(b)
        t.right(90)
    elif clockwise == False:
        t.left(180)
        t.forward(a)
        t.left(90)
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.left(90)
        t.forward(b)
        t.right(90)

if __name__ == "__main__":
    t = turtle.Turtle()
    
    square(200, 100, True)
    
    t.pencolor("Red")
    square(100, 200, False)
    
    turtle.done()

正多角形、円

正多角形は外角の和が360度であるため、一辺の辺の長さと頂点の数を定義し、各頂点で「360/頂点の数」だけ角度を変えてあげれば正多角形を描くことができます。

つまりこんな感じです。

import turtle

def polygon(l, step, clockwise=True):
    if clockwise == True:
        t.left(90)
        for _ in range(step):
            t.forward(l)
            t.right(360/step)
        t.right(90)
    elif clockwise == False:
        t.left(90)
        for _ in range(step):
            t.forward(l)
            t.left(360/step)
        t.right(90)
            
if __name__ == "__main__":
    t = turtle.Turtle()
    
    polygon(200, 3, True)    
    
    t.pencolor("Red")
    polygon(100, 4, False)
    
    turtle.done()

上の動画では正三角形と正四角形を描いていますが、他の正多角形を描くこともできます。

import turtle

def polygon(l, step, clockwise=True):
    if clockwise == True:
        t.left(90)
        for _ in range(step):
            t.forward(l)
            t.right(360/step)
        t.right(90)
    elif clockwise == False:
        t.left(90)
        for _ in range(step):
            t.forward(l)
            t.left(360/step)
        t.right(90)
            
if __name__ == "__main__":
    t = turtle.Turtle()
    
    polygon(200, 5, True)    
    
    t.pencolor("Red")
    polygon(100, 10, False)
    
    turtle.done()

さらに円は正多角形の頂点をさらに増やした図形として描くことができます。

頂点の数を36程度にするとかなり円に近く見えます。

import turtle

def polygon(l, step, clockwise=True):
    if clockwise == True:
        t.left(90)
        for _ in range(step):
            t.forward(l)
            t.right(360/step)
        t.right(90)
    elif clockwise == False:
        t.left(90)
        for _ in range(step):
            t.forward(l)
            t.left(360/step)
        t.right(90)
            
if __name__ == "__main__":
    t = turtle.Turtle()
    
    polygon(10, 36, True)    
    
    t.pencolor("Red")
    polygon(10, 36, False)
    
    turtle.done()

任意の三角形

次に任意の三角形を描いてみます。

三角形を定義するには2つの辺の長さとその間の角度を定義することで1つの三角形に決めることができます。

そしてこれまでの図形では1周して同じ場所に戻ってくる図形ばかりでしたが、任意の三角形では最後に強制的に開始点に戻してやらなければいけません。

そこで移動前の場所を「pos = t.position()」として取得し、2つの辺を描き終わった後、「t.setposition(pos)」で最初の場所に戻ってくるというようにしてみました。

import turtle

def triangle(a, b, alpha, clockwise=True):
    pos = t.position()
    if clockwise == True:
        t.forward(a)
        t.right(alpha)
        t.forward(b)
        t.setposition(pos)
    elif clockwise == False:
        t.left(180)
        t.forward(a)
        t.left(alpha)
        t.forward(b)
        t.setposition(pos)

if __name__ == "__main__":
    t = turtle.Turtle()
    
    t.penup()
    t.setposition(50, 75)
    t.pendown()
    triangle(100, 150, 35, True)    
    
    t.penup()
    t.setposition(-50, -75)
    t.pendown()
    t.pencolor("Red")
    triangle(150, 200, 75, False)    
    
    turtle.done()

次回はさらに菱形、台形(平行四辺形)、星型、葉っぱ型の描き方を紹介していきます。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次