Why circle disappears at y-coordinates ~ 250

void setup() {
void draw() {
   float y=500+(-90*millis()/1000+(10*millis()*millis()/2/1000000));
   float D=25;
   float x = 0+15*millis()/1000;
   float yc = y;
   float xc=x;
     if (y >500) {
       yc = -y;
     if (x >500) {
       xc = -x;
  circle(xc, yc, D);
  if (millis()/1000>100){noLoop();}

Your y value jumps from 254.0 to -1891.0. This is because you call millis() twice. I replaced your code with

  float millis = millis();
  float y=500+(-90*millis/1000+(10*millis*millis/2/1000000));

Try that.

1 Like


This was in my Drafts and a late response… it may still be helpful to some.

It is because the math is exceeding the maximum value of an integer at some point in the code:


This code shows what happens to y1 when millis() (an integer) is greater than 14654:

The above code shows where the point of concern is in the code.

You are using millis()/1000 for time.

Consider using this floating point division in your code along with floating point math throughout:

float t = millis()/1000.0; // Result is floating point

Use this if you intend to use integer math with 1 sec increments:

float t = millis()/1000; // Result is an integer

Your code will look much cleaner and identifiable as the equation to a parabola:

float y = 20*t*t -100*t+ 200;