互动编程习作1——《代码本色》前五章拓展
1.第0章 引言
1.借以回顾本书的中心编程思想——面向对象编程。我们要用面向对象方法来模拟物体在 Processing窗口的运动,随机游走模型就是这个例子的模板。
2.随机游走模型引入了贯穿本书的两个关键问题:如何定义对象的行为规则,以及如何用 Processing模拟这些行为规则。
3.在本书中,我们需要对随机性、概率和Perlin噪声有基本的了解,随机游走模型展示了 其中的关键点,这在我们以后的学习中会很有用。
Perlin噪声
Perlin噪声算法表现出了一定的自然性,因为它能生成符合自然排序(“平滑”)的伪随机 数序列。图I-5展示了Perlin噪声的效果,x轴代表时间;请注意曲线的平滑性。图I-6展示 了纯随机数的效果。(生成图形的代码可以在本书的下载资料中找到。
参考例子:0-2、0-5
float t = 0;
void setup() {
size(640,240);
}
void draw() {
float n = noise(t);
float x = map(n,0,1,0,width);
ellipse(x,180,16,16);
t += 0.01;
}
2.第1章 向量
向量通常用粗体或者顶上带箭头的字母表示。在本书中,为了能区分向量和标量(标量 指单个值,就像整数或浮点数),我们用带箭头的方式表示一个向量:
单位化向量
计算向量的长度只是一个开始。长度计算函数引入了更多的向量运算,第一个就是单 位化。单位化也称为正规化,正规化就是把某种事物变成“标准”或“常规”状态。一 个“标准”的向量就是长度为1的向量。因此,将一个向量单位化,就是使它的方向保 持不变,但长度变为1,这样的向量称为单位向量。
参考例子:1-1、1-7
PVector location;
PVector velocity;
void setup() {
size(200,200);
}
void draw() {
//background(255);
PVector mouse = new PVector(mouseX,mouseY);
PVector center = new PVector(width / 2,height / 2);
mouse.sub(center);
mouse.normalize();
mouse.mult(50);
translate(width / 2,height / 2);
line(0,0,mouse.x,mouse.y);
}
class PVector {
float x;
float y;
PVector(float x_,float y_) {
x = x_;
y = y_;
}
void add(PVector v) {
x = x + v.x;
y = y