(图书介绍:童晶:《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趣味创意编程》教学视频)
发布评论