python中简单易学的绘图:用turtle画太极图

      为什么想画太极图呢?因为我儿子不知道是看了哪本书还是哪个电视,竟然特地打印出一张太极图要挂在大门口,我赶紧说祖宗这挂在门外,别人看见了还以为咱家出什么事了,你喜欢就挂自己卧室门口吧,于是这张图就成了他门口的一道摆设。既然这么喜欢,咱就把它画出来,岂不玩得更高级。

      闲话少说,言归正传。

      要画的太极图,如下图所示:


图片发自简书App


      有点编程经验的都知道,这个图形是对称图形,因此可以用一个函数实现画一半,调用两次函数即可完成整个图形的绘制。

      绘制图形采用Python中的turtle库函数来实现。想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。


图片发自简书App


      分解这个图形,图片中有红、黄、绿、蓝四种颜色的曲线,每条曲线上的箭头代表乌龟移动的方向。首先从中心开始画一个半圆(如红线所示),然后以红线所示圆的直径作为半径画一个半圆(如黄线所示),再画一个和红线所示圆的半径一样的半圆(如绿线所示),最后画一个小圆,半径为红线所示圆半径的0.15倍(如蓝线所示),之所以选择0.15倍,是因为这样嵌入红圆内的小圆直径和红圆直径接近黄金分割,看起来比较舒服。

 

代码及注释如下:

#引入turtle函数库

from turtle import

#定义画半个太极图的函数,第一个参数radius是大圆的半径,

#color1,color2分别是两种填充颜色,对应图形中的黑白填充

def draw(radius, color1,color2):

    #设置画笔粗细

    width(3)

    #设置画笔颜色和填充颜色

    color("black",color1)

    #准备开始填充图形

    begin_fill()

    #首先画一个半径为radius/2,弧度为180的半圆,画的是红线所示半圆

    circle(radius/2,180)

    #画一个半径为radius,弧度为180的半圆,画的是黄线所示半圆

    circle(radius,180)

    #将画笔方向旋转180度

    left(180)

    #画一个半径为radius/2,弧度为180的半圆,此时半径值为负,

    #圆心在画笔的右边,画的是绿线所示半圆

    circle(-radius/2,180)

    #结束填充

    end_fill()

    #画笔向左旋转90度,正好指向画板上方

    left(90)

    #抬起画笔,再运动时不会留下痕迹

    up()

    #向前移动radius*0.35,这样小圆边线距离大圆边线上下各radius*0.35,

    #小圆的半径就为radius*0.15

    forward(radius*0.35)

    #画笔向右旋转90度,指向画板右侧

    right(90)

    #放下画笔

    down()

    color(color2,color2)

    #开始画内嵌小圆,如蓝线所示

    begin_fill()

    circle(radius*0.15)

    end_fill()

    #旋转画笔90度,指向画板上方

    left(90)

    up()

    #后退radius*0.35

    backward(radius*0.35)

    down()

    #旋转画笔90度,指向画板左方

    left(90)

#定义主函数

def main():

    #设置窗口或者画板大小

    setup(500,500)

    #绘制黑色一半,白色内圆

    draw(200,"black","white")

    #绘制白色一半,黑色内圆

    draw(200,"white","black")

    #隐藏画笔

    ht()

main()

推荐阅读更多精彩内容