xxxxxxxxxx
104
var numbers = [32, 5],
distance = 50,
size = 5,
r = 0,
pastR = 0,
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();
if (size % 2 == 0){
r += TWO_PI / (2*numbers.length);
}
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(r - i * TWO_PI / numbers.length),
y = distance * sin(r - i * TWO_PI / numbers.length),
xPast = (distance - 10) * cos(pastR-index * TWO_PI / recNumbers.length),
yPast = (distance - 10) * sin(pastR-index * TWO_PI / recNumbers.length);
strokeWeight(3);
point(x, y);
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);
}
pastR = r;
size++
running = false;
} else if (key === 'r'&& !running) {
running = true;
numbers = [32, 5];
distance = 50;
recNumbers = [5];
size = 5;
r = 0;
pastR = 0;
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);
point(50 * cos(0), 50 * sin(0));
point(50 * cos(PI), 50 * sin(PI));
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));
}