xxxxxxxxxx
88
var numbers = [32, 5],
distance = 50,
recNumbers = [5],
running = false;
function setup() {
createCanvas(windowWidth, windowHeight);
begin();
}
function draw() {
}
function keyTyped() {
if (key === 'n' && !running) {
running = true;
translate(width / 2, height / 2);
Collatz();
for (var i = 0; i < numbers.length; i++) {
var lastNumber;
if (numbers[i] % 2 == 0) {
lastNumber = numbers[i] / 2;
} else {
lastNumber = (3 * numbers[i]) + 1;
}
var index = recNumbers.indexOf(lastNumber),
x = distance * cos(i * (TWO_PI / numbers.length)),
y = distance * -sin(i * (TWO_PI / numbers.length)),
xPast = (distance - 10) * cos(index * (TWO_PI / recNumbers.length)),
yPast = (distance - 10) * -sin(index * (TWO_PI / recNumbers.length));
strokeWeight(2);
if (numbers[i] % 2 == 1) {
stroke(255, 0, 255);
} else if (numbers[i] % 3 == 1) {
stroke(0, 255, 0);
} else if (numbers[i] % 3 == 2) {
stroke(0, 0, 255);
} else if (numbers[i] % 3 == 0) {
stroke(255, 0, 0);
}
line(x, y, xPast, yPast);
}
running = false;
} else if (key === 'r' && !running) {
running = true;
numbers = [32, 5];
distance = 50;
recNumbers = [5];
begin();
running = false;
}
}
function Collatz() {
recNumbers = numbers;
var newNumbers = [];
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] % 6 == 4) {
newNumbers.push(2 * numbers[i]);
newNumbers.push((numbers[i] - 1) / 3);
} else {
newNumbers.push(2 * numbers[i]);
}
}
numbers = newNumbers;
distance += 10;
}
function begin() {
background(0);
translate(width / 2, height / 2);
strokeWeight(1);
stroke(255);
fill(255, 255, 255, 75);
circle(0, 0, 80);
noFill();
circle(0, 0, 60);
circle(0, 0, 40);
circle(0, 0, 20);
strokeWeight(3);
point(0, 0);
strokeWeight(1);
line(50 * cos(0), 50 * sin(0), 40 * cos(0), 40 *
sin(0));
line(50 * cos(PI), 50 * sin(PI), 40 * cos(PI), 40 *
sin(PI));
}