xxxxxxxxxx
let vertices = [];
let p1;
let p2;
let plane1 = [[1,0,0], [20,0,0]]
let plane2 = [[-1,-2,0], [20,20,0]]
let rc = 20;
let cube;
let pieces1 = []
let pieces2 = []
let p3 = []
let clc = [1,1,1]
function setup() {
createCanvas(600, 600, WEBGL);
orbitControl();
generatePolygon(); // Generate a random polygon
// plane1 = gen_half_space(30)
// plane2 = gen_half_space(30)
plane1 = rand_half_space_sphere(50)
plane2 = rand_half_space_sphere(50)
cube = generateCubeFaces(100)
let out2 = split_body(plane1[0], plane1[1], cube)
pieces1 = out2[0]
pieces2 = out2[1]
let out3 = split_body(plane2[0], plane2[1], pieces2)
pieces2 = out3[0]
p3 = out3[1]
let out4 = split_body(rand_half_space_sphere(50), pieces1)
pieces1 = out4[0]
let out5 = split_body(rand_half_space_sphere(50), pieces1)
pieces1 = out5[0]
}
function draw() {
background(50);
strokeWeight(2)
orbitControl();
rotateY(frameCount * 0.01); // Rotate for better visualization
rotateX(frameCount * 0.005);
stroke(255);
fill(150, 150, 255)
if(clc[0] == 1) pieces1.map(t => draw_poly(t))
stroke(255);
fill(255, 150, 150)
if(clc[1] == 1) pieces2.map(t => draw_poly(t))
stroke(255);
fill(150, 255, 150)
if(clc[2] == 1) p3.map(t => draw_poly(t))
}
function draw_poly(s){
beginShape();
for (let v of s) {
vertex(v);
}
endShape(CLOSE);
}
function draw_body(s){
s.map(t => draw_poly(t))
}
// Function to generate a random polygon in 3D
function generatePolygon() {
vertices = [];
let numVertices = int(random(5, 9)); // Random number of vertices (3 to 7)
for (let i = 0; i < numVertices; i++) {
let angle = map(i, 0, numVertices, 0, TWO_PI);
let r = random(50, 150);
let x = cos(angle) * r;
let y = sin(angle) * r;
let z = 0; // Random depth
vertices.push([x, y, z]);
}
}
function keyPressed() {
if (key === 'n') {
if(eqqq(clc, [0,0,0])) {clc = [1,0,0]; return}
if(eqqq(clc, [1,0,0])) {clc = [1,1,0]; return}
if(eqqq(clc, [1,1,0])) {clc = [1,1,1]; return}
if(eqqq(clc, [1,1,1])) {clc = [1,0,0]; return}
}
}
function eqqq(a,b){
const eps = 0.00001
return a.every((t, k) => abs(a[k] - b[k]) < eps)
}
function rand_half_space_sphere(r){
let n = vNorm([randomGaussian(0,1),randomGaussian(0,1),randomGaussian(0,1),])
let p = vMbyc(n, r)
return [n, p]
}