Python繪制五角星等能一筆畫出的角星


只有奇數和4的整數倍的角星才能一筆畫出,見程序和注釋:

多畫幾種情況認真分析,注意到輔助線對角的等分是絕對的,與邊的垂直是特殊的.

奇數角星小角360/(2n),偶數角星小角360/n.可按此公式畫出任意角星,但只有一筆能畫出的角星比較美觀,有一氣呵成之美.

n=2k 但不是n!=4k的角星可由兩個k角星旋轉得到,相位差360/n.旋轉時注意區分n和k.

import math
import turtle as t

#這種方法只能畫只在尖角處轉向就可以畫出的角星,\
# 即可以用等長線段(線段長度為不轉彎的最大)不提筆畫完的角星\
#如注釋吊28,29行,則偶數角數變為原來2倍,證明此方法只能畫奇數和4的整數倍的角星\
#即只有奇數和4的整數倍的角星才能一筆畫出

def loop(r,n):
    t.fd(ol(r,n))
    t.right(180-360/(2*n))

def ol(r,n):
    na = (360/(4*n)) / 180 * math.pi
    ol = r * math.cos(na) * 2
    ol = int(round(ol))
    return ol

def relocation(r,n):
    t.penup()
    t.left(90)
    t.fd(r)
    t.right(180 - 360/(4*n))
    t.pendown()

def main(r,n):
    times=n
    if n==1 or n==2:
        print('error input')
        exit()
    elif n%2==1:
        print('開始繪制...')
    elif n%2==0:
        n/=2
        if n%2==1:
            print('無法一筆畫出{0:.0f}角星'.format(times))
            exit()
        else:
            print('開始繪制...')
    else:
        print('error input')
        exit()
    relocation(r,n)
    for i in range(times):
        loop(r,n)
    t.penup()
    t.goto(0,0)
    t.seth(0)
    t.pendown()

r=200
n=eval(input('請輸入要繪制的角星的角數n,n需是>=3的整數:')) #eval()函數很重要,不要總忘記加!!!
t.pensize(8)  #注意t.pensize(20)不是t.pensize=20,變量賦值采用=,屬性更改用t.pensize(20)
t.color('green')
t.speed(10)
t.setup(450,450)
main(r,n)
t.done()

五角星和十六角星:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM