前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python与分形0017 - 【教程】彩色色阶蛛网

python与分形0017 - 【教程】彩色色阶蛛网

作者头像
滚神大人
发布2021-12-21 14:53:39
2890
发布2021-12-21 14:53:39
举报
文章被收录于专栏:趣Python趣Python

前些天说到基础入门教程的时候,我们画了多边形,今天写一个简单点的教程,我们基于多边形做一个彩色色阶的蜘蛛网。

回顾下多边形和彩色多边形

多边形

直接贴代码,细节找旧文看。

代码语言:javascript
复制
def draw_gon(length, line):
    angle = 360//line
    for index in range(line):
        turtle.goto(0, 0)
        turtle.pendown()
        turtle.seth(angle*index)
        turtle.fd(length)
        (x,y)=turtle.pos()
        turtle.penup()
        turtle.goto(0, 0)
        turtle.pendown()
        turtle.seth(angle*(index+1))
        turtle.fd(length)
        turtle.goto(x,y)
        turtle.penup()

五边形

六边形

360边形

彩色多边形

直接贴代码,细节找旧文看。

代码语言:javascript
复制
def draw_gon(length, start_angle, line):
    angle = 360//line
    for index in range(line):
        (r,g,b) = colorsys.hsv_to_rgb(index/line,1,1)
        turtle.color((r,g,b))
        turtle.goto(0, 0)
        turtle.begin_fill()        
        turtle.pendown()
        turtle.seth(start_angle + angle*index)
        turtle.fd(length)
        (x,y)=turtle.pos()
        turtle.penup()
        turtle.goto(0, 0)
        turtle.pendown()
        turtle.seth(start_angle+angle*(index+1))
        turtle.fd(length)
        turtle.goto(x,y)
        turtle.penup()
        turtle.end_fill()

彩色五边形示例:

彩色五边形

彩色360边形

彩色色阶蛛网

想要画一个彩色色阶的蛛网,需要解决2个数学问题:

  1. 蛛网和多边形是什么关系?
  2. 彩色色阶的循环如何实现?

先来说第1个问题,其实很简单,不同边长的多边形嵌套形成的就是蛛网。

如下图:

蛛网

再来说第2个问题,看下面的图:

蛛网色阶原理

因为是纵向的色阶,那么:

1、2、3、4连环色,5、6、7、8连环色,9、10、11、12连环色,13、14、15、16连环色 ···

基于此,有两种实现方式:

  • 方式一:按1、2、3、4、5的顺序画三角形,色阶自然顺序。
  • 方式二:按1、5、9、13的顺序画三角形,色阶跳跃处理。

由于前面写的draw_gon函数是按方式二实现的,我们就按第二个方式实现。

代码语言:javascript
复制
def draw_gon(length, start_angle, line, color_start, color_step):
    angle = 360//line
    for index in range(line):
        (r,g,b) = colorsys.hsv_to_rgb((index+color_start+color_step)/line,1,1)
        turtle.color((r,g,b))
        turtle.goto(0, 0)
        turtle.begin_fill()        
        turtle.pendown()
        turtle.seth(start_angle + angle*index)
        turtle.fd(length)
        (x,y)=turtle.pos()
        turtle.penup()
        turtle.goto(0, 0)
        turtle.pendown()
        turtle.seth(start_angle+angle*(index+1))
        turtle.fd(length)
        turtle.goto(x,y)
        turtle.penup()
        turtle.end_fill()

效果图:

蛛网色阶原理

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 回顾下多边形和彩色多边形
    • 多边形
      • 彩色多边形
      • 彩色色阶蛛网
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档