使用Processing表现随机行为及牛顿运动学

使用Processing表现随机行为及牛顿运动学简介实验一效果展示规律介绍与参考案例代码分析实验二效果展示规律介绍与参考案例代码分析实验三效果展示规律介绍与参考案例代码分析实验四效果展示规律介绍与参考案例代码分析实验五效果展示规律介绍与参考案例代码分析简介 本博客中做的五个实验均用Processing完成, 实验内容多半从书籍 The Nature of Code中学习而得, ...
摘要由CSDN通过智能技术生成

简介

    本博客中做的五个实验均用Processing完成,
    实验内容多半从书籍 The Nature of Code中学习而得,
    甚至是在其参考程序的基础上进行拓展修改而成的。

实验一 生成色彩平滑变化的噪声地形图

效果展示

效果一 灰度变换

在这里插入图片描述

效果二 RGB颜色变化

在这里插入图片描述

效果三 将线框隐去

在这里插入图片描述

参考案例与规律介绍

第一个实验我参考的案例是书中的 示例代码 0-6 和练习 0.10
二维Perlin噪声 和 噪声地形图

在原案例中,为了实现噪声地形图,代码中使得矩形顶点的Z轴坐标由 noise() 函数决定

	z[i][j] = 0.5*map(noise(xoff, yoff,zoff), 0, 1, -120, 120);

在此处,noise() 函数为三维的Perlin噪声,其噪声波形由三个值决定。
其中 xoff 与 yoff 两个值分别为行列的漂移值,这个两个值在地形图坐标循环计算过程中递增,使得不同的矩形高低不同。
但是 xoff 和 yoff 的递增值很小,这样做是为了保证相邻的矩形之间高度相差不会过于大,使得整体地形看起来平滑、和谐。
其中 map() 函数为映射函数,将 noise() 的返回值由(0,1)映射到(-120,120).

在认真分析原案例后,我发现原案例的矩形是只有一种颜色的,看起来过于单调。
所以就有了让地形图呈现彩色的想法。

代码分析

为了让矩形呈现彩色,那就要分别给矩形的RGB赋值。每个矩形的颜色要不一样,要想让效果变得炫酷,最好颜色是随机变换的。但是随机性又不能太强,如果一个红色矩形四周的八个矩形都是绿色的,那就太丑了。所以相邻矩形的RGB要平滑的随机变化。
Perlin噪声就能很好的满足这个需求。

	R = map(noise(xoff, yoff,t_coff), 0, 1, 0, 255);
	G = map(noise(xoff, yoff,t_coff+10000), 0, 1, 0, 255);
	B = map(noise(xoff, yoff,t_coff+20000), 0, 1, 0, 255);
	fill(R,G,B);

上面的代码实现了效果一,相邻矩形之间的灰度不同,且随着时间矩形的灰度也会变化。
但是上述代码却没有实现彩色的效果,分析后发现可能是和 noise() 的参数有关,虽然 RGB 的第三个参数不同,但是前两个参数相同,导致其返回值的差异有限,只能产生灰度图的效果。

	R = map(noise(xoff, yoff,t_coff), 0, 1, 0, 255);
    G = map(noise(xoff+10000, yoff+10000,t_coff+10000), 0, 1, 0, 255);
    B = map(noise(xoff+20000, yoff+20000,t_coff+20000), 0, 1, 0, 255);
    fill(R,G,B);

在修改代码后就实现了效果二。
但是地形图中矩形边上还是有黑黑的边框,不是特别美观。将边框隐去有两个方法,一个是让边框颜色和矩形一样,另一个是直接不绘制线框,两个方法都可以,我使用了第一个。

	stroke(R,G,B);
	noStroke();

实验二 蚊虫群模拟

效果展示

效果一

在这里插入图片描述

效果二

在这里插入图片描述

参考案例与规律介绍

第二个实验我参考的案例是书中的 示例代码 1-5示例代码 1-11
向量的长度一组同时朝着鼠标加速的运动物体

本实验的规律是蚊虫群与人的交互。
假设一个人身处傍晚时的草坪上,那这个人的头上可能就密密麻麻的飞着非常多的小蚊子。当这个人保持静止或者是走路时,蚊群就会跟着这个人,当你想要挥手去赶这些“烦人”的小东西时,它们就会一哄而散。
在本实验中,当鼠标静止不动或者是运动趋势为远离小球时,小球会受到一个方向为小球到鼠标向量方向的力,即小球接近鼠标,且小球变为蓝色;当鼠标运动趋势为靠近

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值