(图书介绍:童晶:《Python趣味创意编程》新书预告)

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

7 随机扭动的曲线

视频教程:

最终代码:

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) # 用白色重新填充背景 

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

 

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

 

这一章主要讲解了随机函数、RGB颜色模型、曲线绘制的知识,实现了随机扭动的曲线。应用随机和颜色,读者也可以在这章内容的基础上,进行更多的创作。生成的随机风格图片,也可以用于本子封皮、鼠标垫、手机壳、T恤衫等上面个性化图案的印制。

 

更多推荐

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