Skip to content

Instantly share code, notes, and snippets.

@Luna-Klatzer
Created November 19, 2025 01:47
Show Gist options
  • Select an option

  • Save Luna-Klatzer/a0d6134f9ce0781978e3b824c52cbffa to your computer and use it in GitHub Desktop.

Select an option

Save Luna-Klatzer/a0d6134f9ce0781978e3b824c52cbffa to your computer and use it in GitHub Desktop.
A spiral representation of primes using circles in p5.js as an assignment for a university course.
const dim_width = 200;
const dim_height = 200;
const scale_factor = 4;
const real_width = dim_width * scale_factor;
const real_height = dim_height * scale_factor;
const center = { x: real_width / 2, y: real_height / 2 };
const bg_color = "#C71242";
const src_color = "##DAA520";
const to_color = "#483D8B";
function setup() {
createCanvas(real_width, real_height);
}
function draw() {
background(bg_color);
const primeGen = genPrime();
let offSetX = 0;
let offSetY = 0;
let prevOffSetX = 0;
let prevOffSetY = 0;
for (let i = 0; i < 40; i++) {
const fillColor = lerpColor(color(src_color), color(to_color), i / 40);
const primeNumber = primeGen.next().value;
stroke(fillColor);
fill(fillColor);
if (i !== 0) {
offSetX = primeNumber + i * primeNumber * Math.cos(i * 30);
offSetY = primeNumber + i * primeNumber * Math.sin(i * 30);
}
const x = center.x + offSetX / 10;
const y = center.y + offSetY / 10;
drawPrimeCircle(x, y, primeNumber);
const controlPointAX = x + offSetX / 25;
const controlPointAY = y + offSetY / 25;
const controlPointBX = x + prevOffSetX / 25;
const controlPointBY = y + prevOffSetY / 25;
const prevX = center.x + prevOffSetX / 25;
const prevY = center.y + prevOffSetY / 25;
curve(prevX, prevY, controlPointAX, controlPointAY, controlPointBX, controlPointBY, x, y);
prevOffSetX = offSetX;
prevOffSetY = offSetY;
}
}
function* genPrime() {
let curr = 2;
while (true) {
let isPrime = true;
const limit = Math.sqrt(curr);
for (let i = 2; i <= limit; i++) {
if (curr % i === 0) isPrime = false;
}
if (isPrime) {
yield curr;
}
curr++;
}
}
function drawPrimeCircle(x, y, primeNumber) {
const r = Math.sqrt(primeNumber / Math.PI);
const d = 2 * r;
circle(x, y, d * scale_factor);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment