Triangle space partitioning
Double-click to restart.
function setup() {
let cvs = createCanvas(windowWidth, windowHeight);
colorMode(HSB)
seed = random(100000000)
noStroke()
}
function windowResized() {
createCanvas(windowWidth, windowHeight)
}
function doubleClicked() {
seed = random(100000000)
frameCount = 0
}
let seed
let maxSize = 15
function draw() {
//background(0)
randomSeed(seed)
i = frameCount ** 1.5
//triangleBSP(200, -250, 1000, 500, -500, 500)
if (random() > 0.5) {
translate(width/2, height/2)
scale(-1, -1)
translate(-width/2, -height/2)
}
if (random() > 0.5) {
triangleBSP(0, 0, width, 0, 0, height)
triangleBSP(width, height, 0, height, width, 0)
} else {
triangleBSP(0, 0, width, 0, width, height)
triangleBSP(0, 0, width, height, 0, height)
}
if (i > 2000 && !mouseIsPressed) {
frameCount = 0
seed = random(100000000)
}
}
let i = 0
function triangleBSP(x1,y1, x2,y2, x3,y3) {
let area = 1/2 * ((x1 - x3) * (y2 - y1) - (x1 - x2) * (y3 - y1))
let n = random(100000000)
let sidesq1 = random(0.2, 1) * ((x1 - x2) ** 2 + (y1 - y2) ** 2)
let sidesq2 = random(0.2, 1) * ((x1 - x3) ** 2 + (y1 - y3) ** 2)
let sidesq3 = random(0.2, 1) * ((x3 - x2) ** 2 + (y3 - y2) ** 2)
let r
i --
if (abs(area) < maxSize * maxSize || i < 0) {
//r = 255 / (sidesq1 + sidesq2 + sidesq3)
//fill(sidesq1 * r, sidesq2 * r, sidesq3 * r)
fill(random(360), random(0, 100), random(40, 100))
//let k = random(i)/100 + (i ** 2)/500/500
//let w = random(-i, i)/1000
//triangle(x1+w,y1+k, x2+w,y2+k, x3+w,y3+k)
triangle(x1,y1, x2,y2, x3,y3)
randomSeed(n)
return
}
if (sidesq1 > sidesq2 && sidesq1 > sidesq3) {
r = sqrt(sidesq2)/(sqrt(sidesq2) + sqrt(sidesq3))
triangleBSP(x1,y1, x1+(x2-x1)*r,y1+(y2-y1)*r, x3,y3)
triangleBSP(x1+(x2-x1)*r,y1+(y2-y1)*r, x2,y2, x3,y3)
} else if (sidesq2 > sidesq3) {
r = sqrt(sidesq3)/(sqrt(sidesq1) + sqrt(sidesq3))
triangleBSP(x3+(x1-x3)*r,y3+(y1-y3)*r, x2,y2, x3,y3)
triangleBSP(x1,y1, x2,y2, x3+(x1-x3)*r,y3+(y1-y3)*r)
} else {
r = sqrt(sidesq1)/(sqrt(sidesq2) + sqrt(sidesq1))
triangleBSP(x1,y1, x2+(x3-x2)*r,y2+(y3-y2)*r, x3,y3)
triangleBSP(x1,y1, x2,y2, x2+(x3-x2)*r,y2+(y3-y2)*r)
}
randomSeed(n)
}(Originally seen at https://editor.p5js.org/bojidar-bg/sketches/okbnIB7-q)
Browse more articles?
← COTR Experiments tagged p5 (17/85) Rotating fractal →
← COTR Experiments on this site (17/85) Rotating fractal →