Conditions to make a circle grow and shrink

Hello,

Sorry because I know this is a very simple question but I’m stuck on this and I need help.

I’m trying to create the conditions to grow a circle up to a certain point, and when it reaches that point, make it smaller (also up to a certain point, and so on). I see is similar to other topics but I think this is a different way to make it.

“tamanyo” is the variable for the original size of the circle, and “a” is the variable I am using to grow and then shrink the circle.

This is my code:

float a=0;
float tamanyo=50;

void setup(){
size(400,400);
}

void draw(){
  background(0);
  noFill();
  stroke(255);
  circle(width/2,height/2,tamanyo);
   tamanyo +=a;
    if (a<=0) {
      a++;
    }
   if (a == 20){
    a--;
    }
}

1st define global constants for max & min diameters of your circle():
static final int MIN_DIAM = 3, MAX_DIAM = 100;

2nd declare current diameter & growth speed variables:
float diam = MIN_DIAM, growth = .5;

Then when updating diam w/ growth, check if diam has reached either min or max diameters; if so negate the current growth speed:
if ( (diam += growth) <= MIN_DIAM || diam >= MAX_DIAM ) growth *= -1;

1 Like

Thank you, but I don’t understand the method or it’s not working:

This would be the final code?

float a=0;
float diam=50;
static final int MIN_DIAM = 3, MAX_DIAM = 100;
void setup(){
size(400,400);
}

void draw(){
  background(0);
  noFill();
  stroke(255);
  
  float diam = MIN_DIAM, growth = .5;
  
  circle(width/2,height/2,diam);
   diam +=a;
   if ( (diam += growth) <= MIN_DIAM || diam >= MAX_DIAM ) growth += -1;
}

I use 3.5.3. version of processing

Why are you re-declaring global variable diam as a local variable in draw()?

And in the same vein, why growth is a local variable in draw()?

Both diam & growth need to be global variables, so their current value is remembered while draw() is called back during the sketch execution.

Yeah, sorry.

So this is the solution:

float diam = MIN_DIAM, growth = .5;
static final int MIN_DIAM = 3, MAX_DIAM = 100;
void setup(){
size(400,400);
}

void draw(){
  background(0);
  noFill();
  stroke(255);
  
  circle(width/2,height/2,diam);
    if ( (diam += growth) <= MIN_DIAM || diam >= MAX_DIAM ) growth *= -1;
}

Thank you very much

2 Likes

you could do something like this

void setup(){
  size(400,400);
  float g = 0;
}

float g = 0;
void draw(){
  float f = (50+(sin(g)*5));
  g=g+0.1;
  background(56);
  ellipse(200,200,f,f);
}
1 Like