Turtles chasing turtles.
Log in to post a comment.
class Vector2d { constructor(x, y) { this.x = x; this.y = y; } scale(n) { return new Vector2d(this.x * n, this.y * n); } add(other) { return new Vector2d(this.x + other.x, this.y + other.y); } subtract(other) { return new Vector2d(this.x - other.x, this.y - other.y); } toArray() { return [this.x, this.y]; } } // Parameters Canvas.setpenopacity(1); const numSteps = 720; const numTurtles = 240; const initialRadius = 120; const moveFraction = 0.01; const targetMultiplier = 6; const turtles = [...Array(numTurtles)].map(n => new Turtle()); for (var i = 0; i < numTurtles; i++) { let turtle = turtles[i]; let theta = 2 * i * Math.PI / numTurtles; turtle.penup(); turtle.goto(Math.cos(theta) * initialRadius, Math.sin(theta) * initialRadius); turtle.pendown(); } function step(n) { let newPositions = []; for (var i = 0; i < numTurtles; i++) { let movingTurtle = turtles[i]; let targetTurtle = turtles[(targetMultiplier * i) % numTurtles]; let movingVector = new Vector2d(movingTurtle.x(), movingTurtle.y()); let targetVector = new Vector2d(targetTurtle.x(), targetTurtle.y()); let newVector = movingVector.add(targetVector.subtract(movingVector).scale(moveFraction)); newPositions.push(newVector.toArray()); } for (var i = 0; i < numTurtles; i++) { turtles[i].goto(newPositions[i]); } } function walk(i) { step(i); return i < numSteps; }