想像有隻海龜,只會前進與轉彎,在沙灘上爬行,爬過的路線都會留下痕跡,如果這隻海龜很特別,行走時有個規律,那它就會是隻有藝術感的海龜!
因為只會前進與轉彎,想以程式實作出海龜的行為並不困難,在 p5.js 中,借助 p5.Vector
,以向量的方式可以更簡潔地實作出海龜。
class Turtle {
// 起始位置 (x, y) 與頭面向的角度
constructor(x = 0, y = 0, angle = 0) {
this.coordinateVector = createVector(x, y);
this.headingVector = createVector(1, 0).rotate(angle);
}
// 傳回座標
coordinate() {
return {
x: this.coordinateVector.x,
y: this.coordinateVector.y
};
}
// 前進,為了便於繪圖,傳回起點與終點座標
forward(length) {
const from = this.coordinate();
const v = p5.Vector.mult(this.headingVector, length);
this.coordinateVector.add(v);
const to = this.coordinate();
return {from, to};
}
// 轉彎
turn(angle) {
this.headingVector.rotate(angle);
}
}
如果海龜行走的規律是前進 length
長度,轉動 120 度,能畫出什麼圖案呢?一個三角形!
海龜繪圖法的價值在於,只要將前進、轉彎這兩個簡單動作,以一定規律來組合,就能呈現規律之美,就算每次只有前進、轉彎兩個動作,效果也已經令人驚嘆了: