====== Yiler Huang's Generative Flower ======
By [[yiler-huang| Yiler Huang]]
This is my generative flower. The code will generates a small flower and a cross flower in random positions. The color of the cross flower is random. The small flowerwill be red if it's on the bottom half of the picture; it will be blue if it's on the top half of the picture.
這是我的生成花朵。該代碼會在隨機位置生成一朵小花和一朵十字花。十字花的顏色是隨機的。小花如果在圖片的上半部分則為紅色;在圖片的下半部分則為藍色。
===== Code =====
function setup() {
createCanvas(1700, 800);
noLoop();
}
function randomRange (max, min) {
return Math.floor(min + ((max-min) * Math.random()));
}
function buildPosition (startP, time){
let positionsArray = [];
for (let i = 0; i < time; i ++){
positionsArray.push(startP * i)
}
//console.log(positionsArray)
return positionsArray
}
let colors = [
"darkBlue",
"darkRed"
];
function buildArray (n, fillFunction) {
let outputArray = [];
for (let i = 0; i < n; i++) {
outputArray.push(fillFunction(i));
}
return outputArray;
}
class MainPFlower {
constructor(color, scale) {
this.positionx = buildPosition(90, 18)[randomRange(buildPosition(90, 18).length, 0)];
this.positiony = buildPosition(90, 10)[randomRange(10, 0)];
this.size = 40.5;
this.space = 22.5;
this.leafSpace = 23;
this.fSpace = 90;
this.scale = scale;
if (color != "random"){
this.color = color;
}
else if (color == "random"){
this.color = colors[randomRange(colors.length,0)];
}
if (this.positiony > buildPosition(90, 10)[randomRange(5, 0)]){
this.color = colors[1];
}
else {
this.color = colors[0];
}
//console.log(this.color);
return this.positionx && this.color && this.positiony;
}
draw() {
strokeWeight(1.8);
stroke(0);
fill("lightGreen");
ellipse(
this.positionx,
this.positiony + this.leafSpace * this.scale,
75 * this.scale,
25 * this.scale)
fill(this.color);
ellipse(
this.positionx + this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx - this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony - this.space * this.scale,
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony + this.space * this.scale,
this.size * this.scale
);
fill(237, 207, 38);
ellipse(
this.positionx,
this.positiony,
this.size + 10 * this.scale
);
fill("lightGreen");
ellipse(
this.positionx + this.fSpace * this.scale,
this.positiony + this.leafSpace * this.scale,
75 * this.scale,
25 * this.scale)
fill(this.color);
ellipse(
this.positionx + (this.fSpace * this.scale) + this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx + (this.fSpace * this.scale) - this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx + (this.fSpace * this.scale),
this.positiony - this.space * this.scale,
this.size * this.scale
);
ellipse(
this.positionx + (this.fSpace * this.scale),
this.positiony + this.space * this.scale,
this.size * this.scale
);
fill(237, 207, 38);
ellipse(
this.positionx + (this.fSpace * this.scale),
this.positiony,
this.size + 10 * this.scale
);
fill("lightGreen");
ellipse(
this.positionx - this.fSpace * this.scale,
this.positiony + this.leafSpace * this.scale,
75 * this.scale,
25 * this.scale)
fill(this.color);
ellipse(
this.positionx - (this.fSpace * this.scale) + this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx - (this.fSpace * this.scale) - this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx - (this.fSpace * this.scale),
this.positiony - this.space * this.scale,
this.size * this.scale
);
ellipse(
this.positionx - (this.fSpace * this.scale),
this.positiony + this.space * this.scale,
this.size * this.scale
);
fill(237, 207, 38);
ellipse(
this.positionx - (this.fSpace * this.scale),
this.positiony,
this.size + 10 * this.scale
);
fill("lightGreen");
ellipse(
this.positionx,
this.positiony+ (this.fSpace * this.scale) + this.leafSpace * this.scale,
75 * this.scale,
25 * this.scale)
fill(this.color);
ellipse(
this.positionx + this.space * this.scale,
this.positiony + (this.fSpace * this.scale),
this.size * this.scale
);
ellipse(
this.positionx - this.space * this.scale,
this.positiony + (this.fSpace * this.scale),
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony + (this.fSpace * this.scale) - this.space * this.scale,
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony + (this.fSpace * this.scale) + this.space * this.scale,
this.size * this.scale
);
fill(237, 207, 38);
ellipse(
this.positionx,
this.positiony+ (this.fSpace * this.scale),
this.size + 10 * this.scale
);
fill("lightGreen");
ellipse(
this.positionx,
this.positiony - (this.fSpace * this.scale) + this.leafSpace * this.scale,
75 * this.scale,
25 * this.scale)
fill(this.color);
ellipse(
this.positionx + this.space * this.scale,
this.positiony - (this.fSpace * this.scale),
this.size * this.scale
);
ellipse(
this.positionx - this.space * this.scale,
this.positiony - (this.fSpace * this.scale),
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony - (this.fSpace * this.scale) - this.space * this.scale,
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony - (this.fSpace * this.scale) + this.space * this.scale,
this.size * this.scale
);
fill(237, 207, 38);
ellipse(
this.positionx,
this.positiony - (this.fSpace * this.scale),
this.size + 10 * this.scale
);
}
}
class ArrayFlower {
constructor(color, scale) {
this.positionx = Number(buildPosition(90, 20)[randomRange(buildPosition(90, 20).length, 0)]);
this.positiony = Number(buildPosition(90, 10)[randomRange(10, 0)]);
this.size = 40.5;
this.space = 22.5;
this.leafSpace = 23;
this.scale = scale;
if (color != "random"){
this.color = color;
}
else if (color == "random"){
this.color = colors[randomRange(colors.length,0)];
}
if (this.color == "darkBlue"){
this.positiony = Number(buildPosition(90, 10)[randomRange(10, 5)]);
}
else if (this.color == "darkRed"){
this.positiony = Number(buildPosition(90, 10)[randomRange(5, 0)]);
}
//console.log(this.color)
return this.positionx && this.color && this.positiony;
}
draw() {
strokeWeight(1.8);
stroke(0);
fill("lightGreen");
ellipse(
this.positionx,
this.positiony + this.leafSpace * this.scale,
75 * this.scale,
25 * this.scale)
fill(this.color);
ellipse(
this.positionx + this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx - this.space * this.scale,
this.positiony,
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony - this.space * this.scale,
this.size * this.scale
);
ellipse(
this.positionx,
this.positiony + this.space * this.scale,
this.size * this.scale
);
fill(237, 207, 38);
ellipse(
this.positionx,
this.positiony,
this.size * this.scale + 10
);
}
}
class BigFlower{
constructor() {
this.positionx = 400;
this.positiony = 400;
this.size = 40.5 * 6;
this.space = 22.5 * 6;
this.leafSpace = 23 * 6;
}
draw() {
stroke(200);
strokeWeight(5);
fill(220);
ellipse(
this.positionx,
this.positiony + this.leafSpace,
75 * 6,
25 * 6);
ellipse(
this.positionx + this.space,
this.positiony,
this.size,
this.size
);
ellipse(
this.positionx - this.space,
this.positiony,
this.size,
this.size
);
ellipse(
this.positionx,
this.positiony - this.space,
this.size,
this.size
);
ellipse(
this.positionx,
this.positiony + this.space,
this.size,
this.size
);
ellipse(
this.positionx,
this.positiony,
this.size + 10 * 6,
this.size + 10 * 6
);
}
}
class Emphasis {
constructor(flowerSpace) {
this.size = 40.5;
this.space = 22.5;
this.leafSpace = 23
this.pColor = "undifined"
this.mColor = "undifined"
this.flowerSpace = flowerSpace
}
draw() {
for (let i = 0; i < 20 ; i ++){
for (let y =0; y < 10; y++){
this.positionx = i * this.flowerSpace;
this.positiony = y * this.flowerSpace;
if (i >= 10){
this.pColor = 212;
this.mColor = 204;
}
else if (i < 11) {
this.pColor = 140 + i * 8;
this.mColor = 60 + i * 16;
}
noStroke();
fill(this.mColor);
ellipse(
this.positionx,
this.positiony + this.leafSpace,
75,
25);
fill(this.pColor);
ellipse(
this.positionx + this.space,
this.positiony,
this.size
);
ellipse(
this.positionx - this.space,
this.positiony,
this.size
);
ellipse(
this.positionx,
this.positiony - this.space,
this.size
);
ellipse(
this.positionx,
this.positiony + this.space,
this.size
);
fill(this.mColor);
ellipse(
this.positionx,
this.positiony,
this.size + 10,
this.size + 10
);
}
}
}
}
let MP = new MainPFlower("random", 1);
let randomFlowers = buildArray (1, rf => new ArrayFlower ("random", 1));
let bigF = new BigFlower();
function draw() {
background(220);
let testNE = new Emphasis(90);
bigF.draw();
testNE.draw();
MP.draw();
randomFlowers.forEach(r => r.draw());
}