axolotl base, angle constraints
This commit is contained in:
parent
a23a5b16e3
commit
ad80077fc7
1 changed files with 35 additions and 11 deletions
46
sketch.js
46
sketch.js
|
|
@ -7,23 +7,41 @@ class Segment {
|
|||
this.forward = new vec(0, 0);
|
||||
}
|
||||
|
||||
get_rel(angle, d) {
|
||||
let dir = vec.rotate(this.forward, angle);
|
||||
dir.setMag(d);
|
||||
get_rel(angleOffset, dist) {
|
||||
let dir = vec.rotate(this.forward, angleOffset);
|
||||
dir.setMag(dist);
|
||||
return vec.add(this.pos, dir)
|
||||
}
|
||||
|
||||
follow(x, y) {
|
||||
let target = new vec(x, y);
|
||||
let dir = vec.sub(this.pos, target);
|
||||
this.forward = vec.sub(target, this.pos);
|
||||
dir.setMag(this.size);
|
||||
follow(targetX, targetY, parentForward = null) {
|
||||
let target = new vec(targetX, targetY);
|
||||
|
||||
let targetForward = vec.sub(target, this.pos);
|
||||
let targetAngle = targetForward.heading();
|
||||
|
||||
if (parentForward) {
|
||||
let parentAngle = parentForward.heading();
|
||||
let diff = targetAngle - parentAngle;
|
||||
|
||||
while (diff < -PI) diff += TWO_PI;
|
||||
while (diff > PI) diff -= TWO_PI;
|
||||
|
||||
let maxAngle = PI / 10;
|
||||
diff = constrain(diff, -maxAngle, maxAngle);
|
||||
|
||||
targetAngle = parentAngle + diff;
|
||||
}
|
||||
|
||||
this.forward = p5.Vector.fromAngle(targetAngle);
|
||||
|
||||
let segmentLength = 20;
|
||||
let dir = p5.Vector.mult(this.forward, -segmentLength);
|
||||
this.pos = vec.add(target, dir);
|
||||
}
|
||||
}
|
||||
|
||||
var n = 0;
|
||||
var sizes = [10, 15, 20, 25, 30, 24, 27, 21, 15, 17, ]
|
||||
var sizes = [60, 55, 50, 40, 45, 47, 50, 45, 42, 39, 35, 30, 25, 22, 17, 13, ]
|
||||
var segments = [];
|
||||
function setup() {
|
||||
createCanvas(800, 800);
|
||||
|
|
@ -42,11 +60,11 @@ background(150);
|
|||
segments[0].follow(mouseX, mouseY);
|
||||
for (let i = 1; i < n; i++) {
|
||||
let prev_seg = segments[i - 1];
|
||||
segments[i].follow(prev_seg.pos.x, prev_seg.pos.y);
|
||||
segments[i].follow(prev_seg.pos.x, prev_seg.pos.y, prev_seg.forward);
|
||||
}
|
||||
|
||||
// dibujar
|
||||
fill(100, 200, 150);
|
||||
fill(249, 182, 249);
|
||||
stroke(0);
|
||||
strokeWeight(2);
|
||||
|
||||
|
|
@ -77,4 +95,10 @@ background(150);
|
|||
|
||||
|
||||
endShape(CLOSE);
|
||||
|
||||
let eye1 = head.get_rel(HALF_PI / 2, 45);
|
||||
let eye2 = head.get_rel(-HALF_PI / 2, 45);
|
||||
fill(0);
|
||||
circle(eye1.x, eye1.y, 12);
|
||||
circle(eye2.x, eye2.y, 12);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue