//////////////////////////////////////////////
//Daniel Pizarro
//Desma 28
//Exercise 4.B
//11 / 29 / 04
//////////////////////////////////////////////
Dot[] myDots;
Dot2[] myDots2;
int numDots = 10;
void setup()
{
size(300, 300);
ellipseMode(CENTER);
framerate(30);
angleMode(DEGREES);
smooth();
myDots = new Dot[numDots];
for(int i=0; i<numDots; i++) {
myDots[i] = new Dot(i*30.0, height/4.0, random(1.0, 3.0), 8.0, 2);
}
myDots2 = new Dot2[numDots];
for(int i=0; i<numDots; i++) {
myDots2[i] = new Dot2(i*30.0, height/2.0, random(1.0, 3.0), 10.0, 1);
}
}
void draw()
{
for(int i=0; i<numDots; i++) {
myDots[i].update();
myDots[i].display();
myDots2[i].update();
myDots2[i].display();
}
fill(0, 10);
noStroke();
rect(0, 0, width, height);
}
class Dot
{
float angle = 0.0;
float speed;
float xoffset = 0.0;
float yoffset = 0.0;
float x, y, rad, baserad;
int dir;
Dot(float xi, float yi, float speedi, float radi, int diri) {
x = xi;
y = yi;
speed = speedi;
rad = radi;
baserad = rad;
dir = diri;
}
void update()
{
angle = angle + speed;
if(angle > 360) {
angle = angle - 360;
}
xoffset = cos(angle) * 50;
yoffset = yoffset + 2.0;
if(yoffset > height + 20.0) {
yoffset = -20.0;
}
y += speed * dir;
if((y > height) || (y < baserad)) {
dir *= -1;
rad += rad*2.0;
}
if(rad > baserad) {
rad -= 2.0 * speed;
}
}
void display()
{
noStroke();
fill(255, 255, 0, 200);
ellipse(x+ (xoffset + width/2), y + (yoffset), rad*2, rad*2);
}
}
class Dot2
{
float angle = 0.0;
float speed;
float xoffset = 0.0;
float yoffset = 0.0;
float x, y, rad, baserad;
int dir;
Dot2(float xi, float yi, float speedi, float radi, int diri) {
x = xi;
y = yi;
speed = speedi;
rad = radi;
baserad = rad;
dir = diri;
}
void update()
{
angle = angle + speed;
if(angle > 360) {
angle = angle - 360;
}
xoffset = cos(angle) * 30;
yoffset = yoffset + 1.0;
if(yoffset > height + 20.0) {
yoffset = -50.0;
}
y += speed * dir;
if((y > height-baserad) || (y < baserad)) {
dir *= -1;
rad += rad*4.0;
}
if(rad > baserad) {
rad -= 2.0 * speed;
}
}
void display()
{
noStroke();
fill(55, 255, 0, 200);
ellipse(x + (xoffset), y + (yoffset + 30), rad*2, rad*2);
}
}