Python的艺术玩法——“孔雀开屏”篇

本文用Python实现一个“孔雀开屏”的效果,Python也可以这么玩。下面是源码,注释里面的是不同画面的执行代码。

from turtle import *
from random import *
from math import *
myColor=['green', 'yellow','red','purple', 'blue','green', 'orange', 'blue']  #孔雀每环颜色
myR=[180,130,90,60,40,30,20,10]  # 孔雀每环半径
myRb=[60, 50,40,30,25,20,15,10]
    
def init():  #初始化
    screensize(500,500)
    speed(0)
    penup()
def drawcircle(c,r): # 画圆圈
    fillcolor(c)
    begin_fill()
    circle(r)
    end_fill()
def peacock(): # 画孔雀
    pendown()
    for i in range(8):
        drawcircle(myColor[i],myR[i])
    penup()
def controlR(x):#调整半径比例
    for i in range(len(myR)):
        myR[i]=myR[i]*x
def run(n,bigR):  #最终运行函数,bigR为组合的大图形半径
#注意:right()left()函数按角度计算,三角函数按照弧度计算
    angle=2*pi/n
    right(90+360/n)
    for i in range(n):
        x=cos(angle*i)*bigR
        y=sin(angle*i)*bigR
        goto(x,y)
        left(360/n)
        peacock()

def run2(n,bigR):  #与run()区别:这里是半圆
    angle=pi/n
    right(90+180/n)
    for i in range(n):
        x=cos(angle*i)*bigR
        y=sin(angle*i)*bigR
        goto(x,y)
        left(180/n)
        peacock()
def run2(n,bigR,scale):  #最终运行函数,bigR为组合的大图形半径,scale代表弧度与2pi的比例
#注意:right()left()函数按角度计算,三角函数按照弧度计算
    angle=2*pi/n*scale
    right(90+360/n*scale)
    for i in range(n):
        x=cos(angle*i)*bigR
        y=sin(angle*i)*bigR
        goto(x,y)
        left(360/n*scale)
        peacock()

'''
#执行效果1 
init()
goto(0,-160)
peacock()
controlR(0.4)
run(10,200)

#执行效果2 
init()
write('PEACOCK',True, align="center",font=('Arial',30,'normal'))
controlR(0.5)
run(8,160)


#执行效果3
init()
controlR(0.1)
run(10,50)
init()
controlR(4)
left(150)
run(10,150)
goto(0,-350)
write('PEACOCK',True, align="center",font=('Arial',30,'normal'))
'''
#执行效果4 
init()
goto(0,-200)
peacock()
controlR(0.4)
run2(10,200,0.55)
goto(0,-320)
write('PEACOCK',True, align="center",font=('Arial',30,'normal'))

效果一

效果1

代码如下:

#执行效果1 
init()
goto(0,-160)
peacock()
controlR(0.4)
run(10,200)

效果二

效果2.jpg

代码如下:

#执行效果2 
init()
write('PEACOCK',True, align="center",font=('Arial',30,'normal'))
controlR(0.5)
run(8,160)

效果三

效果3

代码如下:

#执行效果3
init()
controlR(0.1)
run(10,50)
init()
controlR(4)
left(150)
run(10,150)
goto(0,-350)
write('PEACOCK',True, align="center",font=('Arial',30,'normal'))

效果四

效果4

代码如下:

#执行效果4 
init()
goto(0,-200)
peacock()
controlR(0.4)
run2(10,200,0.55)
goto(0,-320)
write('PEACOCK',True, align="center",font=('Arial',30,'normal'))

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魂祭心

原 简单图像填充算法

3675
来自专栏网络

简单的 canvas 翻角效果

由于工作需求,需要写一个翻角效果: ? demo链接:http://jsbin.com/rereqes。 右上角需要从无的状态撕开一个标记,且有动画过程,上图是...

2200
来自专栏游戏杂谈

as3绘制抛物线

一般做页游的过程中,特效的释放可能是不是固定位置的播放,是需要进行“运动的”(其实就是移动特效这个影响剪辑)。举个例子:步兵射箭,不确定箭发射的方向,事先也不...

1062
来自专栏程序员互动联盟

网站上的验证码是怎么产生的?

目前,许多网站的会员登录时都要求输入验证码,尽管验证码的形式五花八门,但是所使用的原理基本是一样的,都是生成随机字符串,然后描绘成图片的形式输出。 验证码的...

3619
来自专栏数据小魔方

查询与引用函数——offset函数

今天要跟大家分享的是一个强大的查询与引用函数——offset函数! OFFSET函数的语法参数相对比较多,但是因为参数位置和函数都比较固定,所以只要能够理解各自...

3257
来自专栏IMWeb前端团队

transform 的副作用

本文作者:IMWeb elvin 原文出处:IMWeb社区 未经同意,禁止转载 transform 想必大家都很熟悉,可以通过其转换(translat...

2179
来自专栏HT

基于HT for Web的3D树的实现

在HT for Web中2D和3D应用都支持树状结构数据的展示,展现效果各异,2D上的树状结构在展现层级关系明显,但是如果数据量大的话,看起来就没那么直观,找到...

1985
来自专栏章鱼的慢慢技术路

用Python中的tkinter模块作图

4175
来自专栏HT

基于HTML5的3D网络拓扑树呈现

在HT for Web中2D和3D应用都支持树状结构数据的展示,展现效果各异,2D上的树状结构在展现层级关系明显,但是如果数据量大的话,看起来就没那么直观,找到...

24410
来自专栏hightopo

基于HT for Web的3D树的实现

1082

扫码关注云+社区

领取腾讯云代金券