用python画七巧板兔子 python程序绘制七巧板

您所在的位置:网站首页 python画兔子 用python画七巧板兔子 python程序绘制七巧板

用python画七巧板兔子 python程序绘制七巧板

2024-05-08 19:12| 来源: 网络整理| 查看: 265

    七巧板实物如图1所示,七块板组成一个正方形。设正方形的边长为L,则两大直角等腰三角形的底边为L,中直角等腰三角形的边长为L/2,两小直角等腰三角形的底边为L/2。45°菱形和长为L/2高为L/4。正方形的对角线长为L/2。

用python画七巧板兔子 python程序绘制七巧板_Turtle

图1 七巧板实物 

    如何用尽量少的语句完成七巧板的绘制,本篇中用到一些技巧。

    本篇使用Python的Turtle来绘制七巧板,关于Turtle绘图本已多篇文章介绍,本篇只介绍与绘制七巧板有关技巧相关的内容。

    color()函数可同时设置画笔颜色和填充颜色,只有一个颜色时画笔颜色和填充颜色相同,语法如下:

Turtle对象.color([,])

    填充时区域可不封闭,此时起点与终点间用无色直线连接。

    填充区域的起点为begin_fill()函数后当前坐标,终点为end_fill()前的当前坐标。

    区域填充抬笔也可填色,只不过不绘制边界。

    Turtle的goto()函数按最短路径移动画笔,也就是说,如是落笔状态,从当前坐标goto到指定坐标将绘制出两坐标的连接直线。

一、转角+直线绘制多边形

    先用传统和转角(lt()、rt())画直线(fd())绘制七巧板。颜色用赤橙黄绿青蓝紫绘制。

    由于画线需要转一定角度再画线,所以画一条直线需要二条语句,大部分多边形可以用“边数-1”条直线绘制。同时抬笔画填充色块,避免抬笔落笔,某多边形的终点即下个多边形的起点,减少无效的直线绘制。源代码如下:

import turtle as tl tl.speed(9) clr = ['#FF0000','#FF8000','#FFFF00','#00FF00','#00FFFF','#0000FF','#8000FF'] len,sqr2 = 300,2**0.5 # clr为颜色列表,len为七巧板最大边长,sqr2为sqrt(2) tl.pu() tl.ht() tl.color(clr[0]) # 红,大三角形 tl.begin_fill() # 画二条边,第三条边填色时直线封闭 tl.lt(-45) tl.fd(len*sqr2/2) tl.rt(135) tl.fd(len) tl.end_fill() tl.color(clr[1]) # 橙,大三角形 tl.begin_fill() # 画二条边,第三条边填色时直线封闭 tl.rt(90) tl.fd(len) tl.rt(135) tl.fd(len*sqr2/2) tl.end_fill() tl.color(clr[2]) # 黄,小三角形 tl.begin_fill() # 画二条边,第三条边填色时直线封闭 tl.lt(90) tl.fd(len*sqr2/4) tl.rt(135) tl.fd(len/2) tl.end_fill() tl.color(clr[3]) # 绿,菱形 tl.begin_fill() # 画三条边,第四条边填色时直线封闭 tl.lt(45) tl.fd(len*sqr2/4) tl.lt(135) tl.fd(len/2) tl.lt(45) tl.fd(len*sqr2/4) tl.end_fill() tl.color(clr[4]) # 青,正方形 tl.begin_fill() # 画三条边,第四条边填色时直线封闭 tl.lt(90) for i in range(3): tl.fd(len*sqr2/4) tl.rt(90) tl.end_fill() tl.color(clr[5]) # 蓝,中三角形 tl.begin_fill() # 唯一画三条边,第三条边是到达最后一个三角形起点 tl.fd(len*sqr2/2) tl.lt(135) tl.fd(len/2) tl.lt(90) tl.fd(len/2) tl.end_fill() tl.color(clr[6]) # 紫,小三角形 tl.begin_fill() # 画二条边,第三条边填色时直线封闭 tl.fd(len/2) tl.lt(135) tl.fd(len*sqr2/4) tl.end_fill()

    执行结果如图2所示。

用python画七巧板兔子 python程序绘制七巧板_经验分享_02

图2 转角+直线绘制的七巧板

二、goto()绘制多边形

    由于画线需要转一定角度再画线,所以画一条需要二条语句,利用goto()函数直线移动的特性,所以画一条直线只需一条语句。同时抬笔画填充色块,避免抬笔落笔,某多边形的终点即下个多边形的起点,减少无效的坐标移动。源代码如下:

import turtle as tl tl.speed(9) clr = ['#FF0000','#FF8000','#FFFF00','#00FF00','#00FFFF','#0000FF','#8000FF'] len = 150 # len为七巧板最大边长的一半 tl.pu() tl.ht() tl.color(clr[0]) # 红,大三角形 tl.begin_fill() tl.goto(len,-len) tl.goto(-len,-len) tl.end_fill() tl.color(clr[1]) # 橙,大三角形 tl.begin_fill() tl.goto(-len,len) tl.goto(0,0) tl.end_fill() tl.color(clr[2]) # 黄,小三角形 tl.begin_fill() tl.goto(len/2,len/2) tl.goto(len/2,-len/2) tl.end_fill() tl.color(clr[3]) # 绿,菱形 tl.begin_fill() tl.goto(len,-len) tl.goto(len,0) tl.goto(len/2,len/2) tl.end_fill() tl.color(clr[4]) # 青,正方形 tl.begin_fill() tl.goto(0,0) tl.goto(-len/2,len/2) tl.goto(0,len) tl.end_fill() tl.color(clr[5]) # 蓝,中三角形 tl.begin_fill() tl.goto(len,0) tl.goto(len,len) tl.end_fill() tl.color(clr[6]) # 紫,小三角形 tl.begin_fill() tl.goto(-len,len) tl.goto(-len/2,len/2) tl.goto(0,len) tl.end_fill()

    执行结果如图2所示。

用python画七巧板兔子 python程序绘制七巧板_经验分享_02

图3 goto()绘制的七巧板

    结果与图2完全相同,而且少了13行语句,运行速度也快了不少。所以如果直线的端点坐标容易计算时,用goto()绘制直线的方法更优。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3