Skip to content

Instantly share code, notes, and snippets.

@webbisswiftapps
Created May 28, 2021 07:12
Show Gist options
  • Save webbisswiftapps/da0169d5b7b6c6bb2bb414bf10640efe to your computer and use it in GitHub Desktop.
Save webbisswiftapps/da0169d5b7b6c6bb2bb414bf10640efe to your computer and use it in GitHub Desktop.
ArrayList<PhylloTaxis> flowers;
int spacing = 500;
PhylloTaxis flower;
void setup(){
size(1920, 1080);
background(10, 20, 30);
flowers = new ArrayList();
}
void spawnFlower(){
float centerX = random(20, width - 20);
float centerY = random(20, height - 20);
//make sure it is not too near to any of the existing flowers
for(int i = 0; i< flowers.size(); i++){
//calculate distance
PhylloTaxis flower = flowers.get(i);
float dist = dist(centerX, centerY, flower.centerX, flower.centerY);
if(dist < spacing) return ;
}
PhylloTaxis flower = new PhylloTaxis();
flower = new PhylloTaxis();
flower.centerX = centerX;
flower.centerY = centerY;
flower.scale = 5;
flower.size = int(random(2, 8));
flower.colorIndicator = int(random(0,2));
flower.angle = random(0, 180);
flowers.add(flower);
}
PhylloTaxis createFlower(){
PhylloTaxis flower = new PhylloTaxis();
flower = new PhylloTaxis();
//flower.centerX = random(20, width - 20);
//flower.centerY = random(20, height - 20);
flower.centerX = width / 2;
flower.centerY = height / 2;
flower.scale = 5;
flower.size = int(random(2, 8));
flower.colorIndicator = int(random(0,2));
flower.angle = random(180, 270);
return flower;
}
void draw(){
//spawnFlower();
/*for(int i = 0; i< flowers.size(); i++){
flowers.get(i).draw();
}*/
if(flower != null && flower.growing){
flower.draw();
}else{
clear();
flower = createFlower();
flower.draw();
}
}
class PhylloTaxis{
float centerX;
float centerY;
int n = 0; //No of dots in the pattern.
int scale; //scale of the whole pattern
int size = 8;
int colorIndicator = 2;
float angle;
boolean growing = true;
void draw(){
float phi = n * angle;
float r = scale * sqrt(n);
float x = r * cos(phi) + centerX;
float y = r * sin(phi) + centerY;
if(colorIndicator == 0){
fill(color(255, 120, (phi - r) % 255));
}else if(colorIndicator == 1){
fill(color(120, (phi - r) % 255, 255));
}else{
fill(color((phi - r) % 255,255, 120));
}
size += 0.1;
circle(x, y, size);
if(n < 1000){
n++;
}else{
growing = false;
}
textSize(32);
fill(255, 255, 255);
text("Angle: "+angle, centerX, centerY - 250);
}
// Phyllotaxis ::
// phi = n * 137.5;
// r = c* sqrt(n);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment