
๐ p5.js
let ringRadius = 140;
let minorRadius = 75;
let ringStep = 3;
let tubeStep = 3;
let rotY = 0;
let rotSpeed = 0.05;
function setup() {
createCanvas(800, 600, WEBGL);
angleMode(DEGREES);
colorMode(HSB, 360, 100, 100);
strokeWeight(1.5);
noFill();
smooth();
}
function draw() {
background(0);
orbitControl(1.5, 1.5);
rotY = (rotY + rotSpeed) % 360;
rotateY(rotY);
let h = rotY;
beginShape(POINTS);
for (let ringAngle = 0; ringAngle < 360; ringAngle += ringStep) {
for (let tubeAngle = 0; tubeAngle < 360; tubeAngle += tubeStep) {
let x = (ringRadius + minorRadius * cos(tubeAngle)) * cos(ringAngle);
let y = minorRadius * sin(tubeAngle);
let z = (ringRadius + minorRadius * cos(tubeAngle)) * sin(ringAngle);
stroke(h, 100, 100);
vertex(x, y, z);
}
}
endShape();
}