2012-11-21 34 views
0

任何人都可以帮助我一个循环,这将使椭圆形成花的增长。 有5个椭圆作为花瓣和一个中心花椭圆。循环使圆增长

Stem myStem; 
Circle circles[]; 

float scaleFactor=0.5; 

void setup() { 


size(floor(400*scaleFactor), floor(800*scaleFactor)); 
myStem = new Stem(200,800); 
//mpoved this to setup, no need to recreate each frame 
circles = new Circle[6]; 
circles[0] = new Circle(0, -40, 50, 50); 
circles[1] = new Circle(0, -40, 50, 50); 
circles[2] = new Circle(0, -40, 50, 50); 
circles[3] = new Circle(0, -40, 50, 50); 
circles[4] = new Circle(0, -40, 50, 50); 
circles[5] = new Circle(0, 0, 50, 50); 
// also smooth only needs to be called once 
// unless ther is a noSmooth() somewhere 
// smooth(); 
} 

void draw() { 

    float grow = 0; 
    //translate(myStem.initalloX, myStem.initalloY); 
    myStem.drawStem(); 
    //set centre point 
    if (frameCount>grow) { 
    translate(myStem.initalloX, ((frameCount>250)?myStem.initalloY-  500:myStem.initalloY-(2*frameCount))); 
    fill(170, 14, 24); // red 
    for (int i = 0; i < circles.length-1; i++) { 
     ellipse(circles[i].c1+grow, circles[i].c2+grow, circles[i].c3+grow, circles[i].c4+grow); 
     rotate(radians(72)); 
    } 
    fill(14, 17, 170); // blue 
    ellipse(circles[5].c1, circles[5].c2, circles[5].c3, circles[5].c4); 
} 
} 

class Stem { 
int initalloX=200; 
int initalloY=800; 

Stem(int tempInitalloX, int tempInitalloY) { 
    initalloX = tempInitalloX; 
    initalloY = tempInitalloY; 

} 

void drawStem() { 
    background(#0DBADB); 
    scale(scaleFactor, scaleFactor); 
    stroke (12, 149, 11); 
    fill (12, 149, 11); 
    strokeWeight(10); 
    line(initalloX, initalloY, initalloX, ((frameCount>250)?initalloY-500:initalloY-(2*frameCount))); 
    //stem1 
    if (frameCount>101) { 
    noStroke(); 
    translate(initalloX, initalloY-200); 
    scale(min((float)(frameCount-100)/100, 1), min((float)(frameCount-100)/100, 1)); 
    beginShape(); 
    vertex(0, 0); 
    bezierVertex(-40, -5, -30, -40, -80, -20); 
    bezierVertex(-47, -16, -52, 8, 0, 0); 
    endShape(CLOSE); 
    scale(1/min((float)(frameCount-100)/100, 1), 1/min((float)(frameCount-100)/100, 1)); 
    translate(-initalloX, -(initalloY-200)); 
    noStroke(); 
    } 
    //stem2 
    if (frameCount>151) { 
// noStroke(); 
    translate(initalloX, initalloY-300); 
    scale(-min((float)(frameCount-150)/150, 1), min((float)(frameCount-150)/150, 1)); 
    beginShape(); 
    vertex(0, 0); 
    bezierVertex(-40, -5, -30, -40, -80, -20); 
    bezierVertex(-47, -16, -52, 8, 0, 0); 
    endShape(CLOSE); 
    scale(-1/min((float)(frameCount-150)/150, 1), 1/min((float)(frameCount-150)/150, 1)); 
    translate(-initalloX, -(initalloY-300)); 

    } 
    } 
} 

class Circle { 

    int c1 = 0; 
    int c2 = -40; 
    float c3 = 50; 
    float c4 = 50; 

    Circle(int tc1, int tc2, float tc3, float tc4) { 
    c1 = tc1; 
    c2 = tc2; 
    c3 = tc3; 
    c4 = tc4; 
    } 
} 

这是一个程序中的函数,它是在Processing中编写的。 在此先感谢帮助/输入!

+0

你在画什么? – MadProgrammer

+0

@MadProgrammer你是什么意思? – choloboy

+0

您是否正在使用Swing,AWT,SWT一些其他图形工具包 – MadProgrammer

回答

1

_hi theolc,为你的花朵我会做这样的事情,对你来说是一个非常简单的开始;)。看看它是否有帮助。我选择了三角学,因为在这种情况下,我觉得比旋转更容易控制。检查出来(点击鼠标增长/点击任意键缩小):

Stem myStem; 
Circle circles[]; 
Flower p = new Flower(); 

float scaleFactor=0.5; 


void setup() { 


    size(floor(400*scaleFactor), floor(800*scaleFactor)); 
    myStem = new Stem(200, 800); 
    p = new Flower (0, 0); 
    //mpoved this to setup, no need to recreate each frame 
    circles = new Circle[6]; 
    circles[0] = new Circle(0, -40, 50, 50); 
    circles[1] = new Circle(0, -40, 50, 50); 
    circles[2] = new Circle(0, -40, 50, 50); 
    circles[3] = new Circle(0, -40, 50, 50); 
    circles[4] = new Circle(0, -40, 50, 50); 
    circles[5] = new Circle(0, 0, 50, 50); 
    // also smooth only needs to be called once 
    // unless ther is a noSmooth() somewhere 
    smooth(); 
} 

void draw() { 

    float grow = 0; 
    //translate(myStem.initalloX, myStem.initalloY); 
    myStem.drawStem(); 
    //set centre point 
    if (frameCount>grow) { 

    translate(myStem.initalloX, ((frameCount>250)?myStem.initalloY-  500:myStem.initalloY-(2*frameCount))); 


    fill(170, 14, 24); // red 
    for (int i = 0; i < circles.length-1; i++) { 
     ellipse(circles[i].c1+grow, circles[i].c2+grow, circles[i].c3+grow, circles[i].c4+grow); 
     rotate(radians(72)); 
    } 
    fill(14, 17, 170); // blue 
    ellipse(circles[5].c1, circles[5].c2, circles[5].c3, circles[5].c4); 
    p.grow(); 
    } 

    p.display(); 
} 

class Stem { 
    int initalloX=200; 
    int initalloY=800; 

    Stem(int tempInitalloX, int tempInitalloY) { 
    initalloX = tempInitalloX; 
    initalloY = tempInitalloY; 
    } 

    void drawStem() { 
    background(#0DBADB); 
    scale(scaleFactor, scaleFactor); 
    stroke (12, 149, 11); 
    fill (12, 149, 11); 
    strokeWeight(10); 
    line(initalloX, initalloY, initalloX, ((frameCount>250)?initalloY-500:initalloY-(2*frameCount))); 
    //stem1 
    if (frameCount>101) { 
     noStroke(); 
     translate(initalloX, initalloY-200); 
     scale(min((float)(frameCount-100)/100, 1), min((float)(frameCount-100)/100, 1)); 
     beginShape(); 
     vertex(0, 0); 
     bezierVertex(-40, -5, -30, -40, -80, -20); 
     bezierVertex(-47, -16, -52, 8, 0, 0); 
     endShape(CLOSE); 
     scale(1/min((float)(frameCount-100)/100, 1), 1/min((float)(frameCount-100)/100, 1)); 
     translate(-initalloX, -(initalloY-200)); 
     noStroke(); 
    } 
    //stem2 
    if (frameCount>151) { 
     // noStroke(); 
     translate(initalloX, initalloY-300); 
     scale(-min((float)(frameCount-150)/150, 1), min((float)(frameCount-150)/150, 1)); 
     beginShape(); 
     vertex(0, 0); 
     bezierVertex(-40, -5, -30, -40, -80, -20); 
     bezierVertex(-47, -16, -52, 8, 0, 0); 
     endShape(CLOSE); 
     scale(-1/min((float)(frameCount-150)/150, 1), 1/min((float)(frameCount-150)/150, 1)); 
     translate(-initalloX, -(initalloY-300)); 
    } 
    } 
} 

class Circle { 

    int c1 = 0; 
    int c2 = -40; 
    float c3 = 50; 
    float c4 = 50; 

    Circle(int tc1, int tc2, float tc3, float tc4) { 
    c1 = tc1; 
    c2 = tc2; 
    c3 = tc3; 
    c4 = tc4; 
    } 
} 






class Flower { 


    float centerX; 
    float centerY; 
    float posX; 
    float posY; 
    float maxSize = 51; 
    float maxFactor = 40; 
    float sizes = 0; 
    float factor = 0; 
    float speed = 0.17; 

    Flower() { 
    } 
    Flower(float _centerX, float _centerY) 
    { 
    centerX = _centerX; 
    centerY = _centerY; 
    } 

    void setCenter(float x, float y) 
    { 
    centerX = x; 
    centerY = y; 
    } 

    void display() 
    { 
    for (int i = -18; i < 360; i+=72) 
    { 
     posX = centerX + cos(radians(i)) * factor; 
     posY = centerY + sin(radians(i)) * factor; 
     noStroke(); 
     fill(14, 170, 170); // blue 
     ellipse(posX, posY, sizes, sizes); 
    } 
    fill(145, 170, 170); 

    ellipse(centerX, centerY, sizes , sizes); 
    } 


    void grow() 
    { 
    factor = (factor < maxFactor)? factor + speed: maxFactor; 
    sizes = (sizes < maxSize)? sizes + speed*1.3 : maxSize; 

    } 
}// end of Flower 
+1

编辑了一段代码... –

+0

我编辑了问题中的代码......也许它可以帮助回答我的原始问题更多?再次感谢各位帮助我! – choloboy

+1

那么另一个镜头......?编辑的代码。 –