码迷,mamicode.com
首页 > 编程语言 > 详细

Python绘制五角星等能一笔画出的角星

时间:2018-06-22 19:58:48      阅读:746      评论:0      收藏:0      [点我收藏+]

标签:函数   十六   方法   整数   忘记   alt   赋值   分享   oop   

只有奇数和4的整数倍的角星才能一笔画出,见程序和注释:

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 in (1,2,3,4,8):
        print(无法一笔画出{0:.0f}角星.format(times))
        exit()
    if n%2==0:
        n/=2
        if n%2==1:
            print(无法一笔画出{0:.0f}角星.format(times))
            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:)) #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()

五角星和十六角星:

技术分享图片技术分享图片

Python绘制五角星等能一笔画出的角星

标签:函数   十六   方法   整数   忘记   alt   赋值   分享   oop   

原文地址:https://www.cnblogs.com/zhangziyan/p/9215226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!