2018年6月19日火曜日

【Python】5芒星, 7芒星を描くプログラム【タートルグラフィックス】

n芒星(nは奇数) を描くプログラム を作りました。

n芒星(nは奇数) を描くプログラムのソースコードはこちら です。

import turtle
import math

#---------------角度の単位を度からラジアンに変換する関数------------
def deg2rad(degrees):
    return degrees * (math.pi/180)

#--------------- drawStarfive() の 引数--------------------
# ttl: turtleオブジェクト
# (x,y): 座標
# n: 線の数
# radius: 外接円の半径
# angle: 回転してる角度(左右対称の状態を基準に反時計回りに何度回転してるか)

#--------------- 正n芒星を描く関数(nは奇数)------------------
def drawStarN(ttl, centerX, centerY, n, radius, angle=0):
    #----------角度や線の長さを設定----------------
    in_angle = 180/n # 内角
    ex_angle = 180 - in_angle # 外角
    length = 2 * math.cos(deg2rad(in_angle/2)) * radius # 星の線の長さ
    initial_heading = angle + 90 + ex_angle + in_angle/2 # 最初に線を引く方向
    rad = deg2rad(angle + 90) # 一番最初に描き始める点がある角度。単位はラジアン
    x = centerX + radius * math.cos(rad) # 最初に描き始める頂点のx座標
    y = centerY + radius * math.sin(rad) # # 最初に描き始める頂点のy座標
    initial_point = (x, y) # 最初に描き始める頂点
    #----------星を描く準備-----------------
    ttl.penup() # ペンを上げる(移動中に線が引かれない)
    ttl.goto(initial_point) # 星の頂点に移動(回転しないなら一番上の点)
    ttl.setheading(initial_heading) # 最初の進行方向を向く
    ttl.pendown() # ペンを下ろす(移動中に線が引かれるようになる)
    #----------星を描く---------
    for i in range(n):
        ttl.forward(length)
        ttl.left(ex_angle)

#----------設定-----------
scr = turtle.Screen() # 画面を作る
ttl = turtle.Turtle() #カーソルを作る
ttl.speed(10) # 絵を描くスピードを設定する

#-----------正 i 芒星(i=3,5,7,9,11) を描く---------
for i in range(3, 11, 2):
    drawStarN(ttl, centerX=0, centerY=0, n=i, radius=200, angle=0)
    ttl.clear() # 描いた図形を消す

ttl.reset() # 一番最初の状態に戻る(カーソルを中心に戻らせる)
ttl.write("Click here to exit", align="center", font=("Arial", 30, "normal"))
ttl.hideturtle() # カーソルを見えないようにする
scr.exitonclick() # クリックしたら終了する

0 件のコメント:

コメントを投稿

投稿されたコメントは承認後に公開されます。