Alex
Alex

Reputation: 197

If statement confusion

Below is my code. I am trying to make the center sphere rotate part of the way around its orbit, then when it hits the point on its orbit (-orbitRadius, 0) it simply moves off to the left. I used an if statement, but it does not work properly. The issue is that I need to somehow make the code such that once the if statement is invoked, the coordinates are calculated using the version in the if loop and not the original formulas. It only does this for one frame as is. Can anyone help?


import java.util.*;
import java.awt.*;

public class Spiral
{

 public static void main(String[] args)
 {    

    int rcircle = 200;

    int radius = 0;

    escape(rcircle, radius);
  }


 public static void escape (int rcircle, int radius)
 { 
  StdDraw.setCanvasSize(600, 400);
  StdDraw.setXscale(0, 600);
  StdDraw.setYscale(0, 400);

  double xprof;
  double yprof;

  long T0 = System.currentTimeMillis();
  final int FRAME_TIME = 50;


  for (int t = 0; t<= 1000; t++) { // note: Prof. Yang starts in his optimal position
    double x = (Math.cos(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 300);
    double y = (Math.sin(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 200);

    if (y == 0) {
      x = (300 - rcircle/12) - 12*t;
      y = 0;   
    }

    StdDraw.circle(x, y, 10);

    xprof = (Math.cos(Math.toRadians(0+4*t))*rcircle + 300);
    yprof = (Math.sin(Math.toRadians(0+4*t))*rcircle + 200);

    StdDraw.filledCircle(xprof, yprof, 10);
    StdDraw.show(FRAME_TIME);
    StdDraw.clear();   
 }
}
}

Upvotes: 1

Views: 165

Answers (1)

parkydr
parkydr

Reputation: 7784

You have a number of problems:

  1. There is an offset of 200 added to y so y will never be zero

  2. There will most likely be some rounding error so checking to 200 is not much better. Try something like:

    if (Math.abs(y-200) < 0.0001)

  3. Your code will not make the sphere continue going left, as y will be recalculated next time round the loop. Once the

  4. The sphere starts at (orbitRadius, 200) so if you fix point 3, the sphere will just move to the left (as y == 200)

Here is a solution with 1-3 fixed:

import java.util.*;
import java.awt.*;

public class Spiral
{

    public static void main(String[] args)
    {    

        int rcircle = 200;

        int radius = 0;

        escape(rcircle, radius);
    }


    public static void escape (int rcircle, int radius)
    { 
        StdDraw.setCanvasSize(600, 400);
        StdDraw.setXscale(0, 600);
        StdDraw.setYscale(0, 400);

        double xprof;
        double yprof;

        long T0 = System.currentTimeMillis();
        final int FRAME_TIME = 50;

        double y = 0;

        for (int t = 0; t<= 1000; t++) { // note: Prof. Yang starts in his optimal position
            double x = (Math.cos(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 300);

            if (Math.abs(y-200) < 0.0001) {
                x = (300 - rcircle/12) - 12*t;
                y = 200;   
            } else {
                y = (Math.sin(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 200);
            }

            StdDraw.circle(x, y, 10);

            xprof = (Math.cos(Math.toRadians(0+4*t))*rcircle + 300);
            yprof = (Math.sin(Math.toRadians(0+4*t))*rcircle + 200);

            StdDraw.filledCircle(xprof, yprof, 10);
            StdDraw.show(FRAME_TIME);
            StdDraw.clear();   
        }
    }
}

Upvotes: 1

Related Questions