第0章 引言
本章主要学习的关于随机数模拟实现的相关代码。
1.传统的随机游走类
随机出0-3的一个数,分别判断向上下左右四个方向运动,较简单
2.概率和非平均分布
随机生成0-1中一个数,小于0.4则向右,0.4-0.6则向左,0.6-0.8则向上,其他则向下,总体该点的运动趋势是向右。
习题示例1:
代码在文件夹中给出
拓展1:四个有50%概率互相追赶的动态walker对象
代码在文件夹中给出
3.随机数的正态分布
绘制正态分布叠加的椭圆:
4.自定义分布的随机数
蒙特卡洛算法:
数字越大则被选到的概率越大
5.Perlin噪声
调用noise()即可得到噪声值
可生成噪声游走模型
习题示例2:
二维perlin噪声着色:
代码在文件夹中给出
运行结果:
拓展2:将二维噪声中的xoff和yoff的增幅改为随机数
运行结果:
画面明显更加杂乱了
第一章 向量
1. 定义向量
习题示例1:用向量对象来实现弹球程序
程序见文件夹
2.向量的运算
习题示例2 用向量减法实现屏幕中心到鼠标所在点的连线
程序见文件夹
习题示例3 用向量乘法将中心到鼠标的连线缩小到一半
程序见文件夹
习题示例4 向量长度可视化
程序见文件夹
示例拓展1 将以上四个实验综合实现
程序见文件夹
向量单位化较简单,不做赘述。
3.加速度
示例5 恒定加速度运动
程序见文件夹
实现随机加速度给加速度乘以随机值即可。
示例6 使物体朝着鼠标位置加速
程序见文件夹
对加速度稍作处理即可
拓展2 接球小游戏
程序见文件夹
当小球碰壁(或玩家控制的板子)后将某一方向的速度反向
板子接到球之后加一分
小球全程受重力(向下加速度),受风力(左右随机的加速度)
若小球掉入底边则重置游戏重置分数。
其余部分较简单略过
检测碰撞函数:
第2章 力
1. 牛顿运动定律,初中知识,略过
2. 加上质量处理的受力函数:
在每一帧要将加速度清零,防止加速度累加
示例1受风力和重力的小球
程序和运行结果见文件夹
拓展1 可交互改变方向的风力
程序见文件夹
增加一行风力控制代码
摩擦力模拟,一个时刻与运动方向反向的力
示例2流体阻力模拟
程序见文件夹
核心的阻力代码:
引力模拟
示例3多个物体之间的万有引力
双循环给每个物体之间加上引力即可,程序见文件夹
第3章 振荡
1. 角度
示例1 指向运动方向的运动
程序见文件夹
在之前“朝鼠标运动的物体”实验基础上,加上旋转物体的代码,使物体时刻转向运动方向。
拓展1交互控制运动方向的“飞船模拟”
程序见文件夹
改变物体旋转角度的update函数,角度+=角速度
2. 正弦余弦函数的应用
示例2 绘制波形
程序见文件夹
拓展2 可交互的噪声曲线
程序见文件夹
3.钟摆和弹簧
钟摆加速度:
弹力:
示例3 弹簧钟摆
程序见文件夹
第4章 粒子系统
1. 单个粒子类
和之前定义的mover类类似,每个粒子包括位置,速度加速度。
但是额外加入一个粒子的生存时长变量
2.使用ArrayList
ArrayList的实现思路和普通数组类似,循环时使用迭代器完成遍历
3.粒子系统类
示例1单个粒子系统
程序见文件夹
拓展1原点能动态移动的粒子系统
程序见文件夹
设置粒子系统的起始位置
4.多态粒子系统
创建单个列表,多态允许把所有东西都当成粒子对象
5.受力作用的粒子系统
示例2受力作用的粒子系统
程序见文件夹
拓展2大块物体碎裂效果
程序见文件夹
单击时激活粒子系统即可