只有奇數和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()
五角星和十六角星: