python 清屏_第7章 随机扭动的曲线(《Python趣味创意编程》教学视频)

本章我们将实现随机扭动的曲线,如图所示。首先绘制圆圈上的一些采样点,并学习random、noise两种随机函数;接着学习曲线的绘制,解决首尾不连续的问题;最后绘制彩色曲线,并添加清屏与保存图片的功能。

知乎视频​www.zhihu.com

视频教程:

知乎视频​www.zhihu.com

最终代码:

def setup(): 
  size(800, 800) # 设定画布大小
  noFill()  # 不要填充颜色
  background(255)   # 纯白背景
  frameRate(30)  # 设置帧率
  
def draw():  
  if frameCount%800 ==0: # 每过若干帧
    saveFrame("RandomLines-######.png") # 保存一张图片
    background(255) # 用白色重新填充背景
        
  translate(width/2, height/2) # 移动坐标系原点到画面中心
  r = map(sin(frameCount/200.0),-1,1,100,255) # 随机红色分量
  g = map(sin(frameCount/300.0),-1,1,0,255)   # 随机绿色分量
  b = map(sin(frameCount/400.0),-1,1,100,255) # 随机蓝色分量
  stroke(r,g,b,15) # 设置线条颜色、透明度
  beginShape() # 开始绘制曲线
  for angle in range(0,360,2):  # 对一圈角度遍历
    radAngle = radians(angle)   # 转换为弧度值
    # 利用三角函数生成周期性的数据,避免曲线首尾不连续的问题
    noiseID = sin(radAngle) - cos(radAngle) 
              + 2*sin(radAngle)*sin(radAngle) 
    # 利用二维噪声函数生成随机半径     
    radius = map(noise(noiseID*0.3,frameCount*0.01) 
                 ,0,1,200,400) 
    x = radius*cos(radAngle) # 这一角度对应的x坐标
    y = radius*sin(radAngle) # 这一角度对应的y坐标
    curveVertex(x, y) # 添加对应顶点
  endShape(CLOSE) # 结束封闭曲线的绘制
  
def mousePressed(): # 当鼠标按键时
  saveFrame("RandomLines-######.png") # 保存一张图片
  background(255) # 用白色重新填充背景 

代码可以随机生成很多的图片效果,并自动保存图片文件:

c61eae57ffe062b0e87b3079ad2443af.png

稍微调整下代码,也可以实现下面的随机线条效果:

25fec053ad8c6e3135dfcee23c11662b.png
知乎视频​www.zhihu.com

读者也可以在这章内容的基础上,进行更多的创作。生成的随机风格图片,也可以用于本子封皮、鼠标垫、手机壳、T恤衫等上面个性化图案的印制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值