anna-yang-generative

Anna Yang's Generative Flower

By Anna Yang

Use your mouse to click in the gray area below and draw flowers!

// this makes use of code from this example:https://p5js.org/examples/interaction-kaleidoscope.html
 
let symmetry = 7;
 
let myWidth = 1700;
let myHeight = 800
 
let slider;
 
function setup() {
  createCanvas(myWidth,myHeight);
  angleMode(DEGREES);
background(125);
  brushSizeSlider = createButton("Brush Size");
  sizeSlider = createSlider(1,100,3,0.1);
 
}
 
function buildArray (n, fillFunction) {
  let outputArray = [];
  for (let i = 0; i < n; i++) {
    outputArray.push(fillFunction(i))
  }
  return outputArray
}
 
class Point {
  constructor(x,y) {
    this.x = x;
    this.y = y;
  }
  move(xDistance, yDistance) {
    return new Point(this.x + xDistance, this.y + yDistance)
  }
  moveByAngle (angle, distance) {
            let r = (-1 * (angle + 180)) * Math.PI / 180;
            return new Point(this.x + distance*Math.sin(r), this.y + distance*Math.cos(r))
            }    
}
 
function pick (inputArray) {
return inputArray[Math.floor(inputArray.length * Math.random())]
}
 
let colors = ["lightCoral","salmon","coral","tomato","lavender","orange","yellowGreen","cornsilk","navajoWhite","wheat","white","gainsboro","mistyRose"]
 
let shape = ["ellipse","rect"]
 
function randomRange (min, max) {
return min + ((max-min) * Math.random())
}
 
class Flower
  {constructor (point){
  this.xPosition = point.x;
  this.yPosition = point.y;
  this.color = pick(colors);
  this.shape = pick(shape);
  }
   draw () {
 
if (this.shape == "rect"){
translate(this.xPosition,this.yPosition);
fill(this.color);
for (let i = 0; i < 9; i++) {
rotate(40);
rect(50,0,100,50);
}}
else if (this.color == "lightCoral"||this.color == "wheat"){
translate(this.xPosition,this.yPosition);
fill(this.color);
for (let i = 0; i < 9; i++) {
rotate(40);
ellipse(50,0,100,50);
}}
else if (this.shape == "ellipse"){
translate(this.xPosition,this.yPosition);
fill(this.color);
for (let i = 0; i < 9; i++) {
rotate(40);
ellipse(50,0,100,50);
}resetMatrix();}
}}
 
let centerPoint = new Point (myWidth/2,myHeight/2);
 
function polyhedronPoints (p,n,d,startingAngle) {
  let angles = buildArray (n, i => startingAngle + (i * 360/n));
  return angles.map(a => p.moveByAngle(a,d))
}
 
function draw() {
 
  if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
    let mx = centerPoint.x + (mouseX - width / 2);
    let my = centerPoint.y + (mouseY - height / 2);
 
    if (mouseIsPressed) {
      for (let i = 0; i < symmetry; i++) {
        let sw = sizeSlider.value();
        strokeWeight(sw);
         let ps = polyhedronPoints (centerPoint,symmetry,(mouseX - centerPoint.x),mouseY);
         let fs = ps.map(p => new Flower(p));
         fs.forEach(f => f.draw())
      }
    }
}
}

  • anna-yang-generative.txt
  • Last modified: 2022/01/24 00:07
  • by renick