Assignment-07-C Epicycloid Evolute-sehenry

Working on this was a bit tricky, but once I understood the concepts and structure behind making these shapes, it became easier. The hardest part for me was using the equations from the website and implementing it into my code. I had to browse through a few posts of other students to get a rough idea of what to do. From the start I wanted to do an epicycloid evolute because it looked really appealing and looked similar to a flower.

epicycloid-evolute-screenshot

sketch

//Seth Henry

//Tuesdays at 10:30

//sehenry@andrew.cmu.edu

//Assignment: Project 7 Composition with Curves (Epicycloid Evolute)


//Global Variables
var nPoints = 400;
var conX;
var scale;
var n=10


function setup() {
    createCanvas(400, 400);
    }


function draw() {
    background(100,50,mouseX); //changes background color based on the mouse position
    fill(mouseX,100,mouseY); //changes the epicycloid color based on the mouse position
    var a = 150.0 //radius a
    var b = 50.0 //radius b
    var angle = map(conX,0,width,0,6*TWO_PI); //rotate around the constraint (conX)
    conX = constrain(mouseX, 0, width); //constrain around mouseX and mouseY
    scaleA = map(conX,0,width,0,3);
    

    push();
    translate(width/2,height/2);
    rotate(angle); //rotate clockwise
    scale(scaleA,scaleA); //change the size of the epicycloid outer portion
    beginShape();

    //Epicycloid Outer
    for (var i=0; i<200; i++){ 
        var theta = map(i,0,nPoints,0, 4*TWO_PI);
        x=(a/(a+2*b))*(a+b)*cos(theta)+b*cos(((a+b)/b)*theta); //xpetal of epicycloid
        y=(a/(a+2*b))*(a+b)*sin(theta)+b*sin(((a+b)/b)*theta); //ypetal of epicycloid
        rect(x-5,y-5,30,30);
    }
    endShape();
    pop();


    push();
    translate(width/2,height/2);
    rotate(-angle); //rotate the opposite way of the outer epicycloid
    beginShape();
    //No Rotate
    //Epicycloid Inner
    for (var i=0; i<200; i++){
        var theta = map(i,0,nPoints,0, 4*TWO_PI); 
        x=(a/(a+2*b))*(a+b)*cos(theta)+b*cos(((a+b)/b)*theta); //xpetal of epicycloid
        y=(a/(a+2*b))*(a+b)*sin(theta)+b*sin(((a+b)/b)*theta); //ypetal of epicycloid
        rect(x-5,y-5,30,30);
    }
    endShape();
    pop();

    push();
    translate(width/2,height/2);
    rotate(angle); //rotate same direction of epicycloid
   
    beginShape(); //The evolute portion of the flower

        for (var i=0; i<200; i++){
        a=100;
        var theta = map(i,0,nPoints,0, 5*TWO_PI);
        var petalX = a * (((n-1)*cos(theta)+cos((n-1)*theta))/n) //Xpetal of evolute
        var petalY = a * (((n-1)*sin(theta)+sin((n-1)*theta))/n) //ypetal of evolute
       rect(petalX-5,petalY-5,30,30); //draws the inside petals  
}
    endShape();
    pop();


}
    
   

Leave a Reply