private static void draw(int frame) {
    // Draw Worm
    int offset = pos[frame] + 1;
    int len = skel[offset - 1];
    double[] x = new double[len];
    double[] y = new double[len];
    double _x = 0;
    double _y = 0;
    for (int i = 0; i < len; i++) {
      int s = i * 2;
      x[i] = skel[offset + s];
      y[i] = skel[offset + s + 1];
      _x += x[i];
      _y += y[i];
    }
    _x /= len;
    _y /= len;
    StdDraw.clear();
    StdDraw.setPenColor(StdDraw.BLACK);
    StdDraw.text(0, 120, "" + frame);
    StdDraw.setPenRadius(0.003);
    StdDraw.setXscale(-128, 128);
    StdDraw.setYscale(-128, 128);
    for (int i = 0; i < len; i++) {
      x[i] -= _x;
      y[i] -= _y;
      StdDraw.point(x[i], y[i]);
    }
    StdDraw.setPenColor(StdDraw.GREEN);
    StdDraw.setPenRadius(0.01);
    StdDraw.point(x[0], y[0]);

    StdDraw.setXscale(-128, 128);
    StdDraw.setYscale(128, -128);
    StdDraw.setPenColor(StdDraw.MAGENTA);
    StdDraw.setPenRadius(0.005);
    // Recreate from vectors
    offset = frame * n;
    x = new double[n + 1];
    y = new double[n + 1];
    double dist = 3.0;
    for (int i = 0; i < n; i++) {
      x[i + 1] = x[i] + (dist * Math.sin(vec[offset + i]));
      y[i + 1] = y[i] + (dist * Math.cos(vec[offset + i]));
    }
    _x = 0;
    _y = 0;
    for (int i = 0; i < n + 1; i++) {
      _x += x[i];
      _y += y[i];
    }
    _x /= n + 1;
    _y /= n + 1;
    for (int i = 0; i < n + 1; i++) {
      x[i] -= _x;
      y[i] -= _y;
      StdDraw.point(x[i], y[i]);
    }
  }
 public static void main(String[] args) throws Exception {
   skel = loadRawInteger("data/skeleton.dat");
   vec = loadRawDouble("data/vectorsCorrected.dat");
   pos = new int[2000];
   int seek = 0;
   int frame = 0;
   while (frame < pos.length) {
     pos[frame++] = seek;
     seek += (skel[seek] * 2) + 1;
   }
   StdDraw.setCanvasSize(512, 512);
   StdDraw.setXscale(-128, 128);
   StdDraw.setYscale(-128, 128);
   StdDraw.show(100);
   StdDraw.setPenRadius(0.005);
   int f = 0;
   while (true) {
     if (StdDraw.isKeyPressed(KeyEvent.VK_Q)) {
       break;
     }
     if (StdDraw.isKeyPressed(KeyEvent.VK_RIGHT)) {
       if (StdDraw.isKeyPressed(KeyEvent.VK_SHIFT)) {
         f += 10;
         draw(f);
       } else draw(f++);
     }
     if (StdDraw.isKeyPressed(KeyEvent.VK_LEFT)) {
       if (StdDraw.isKeyPressed(KeyEvent.VK_SHIFT)) {
         f -= 10;
         draw(f);
       } else draw(f--);
     }
     StdDraw.show(100);
   }
 }
예제 #3
0
 public static void main(String[] args) {
   final int N = 100;
   StdDraw.setXscale(0, N);
   StdDraw.setYscale(0, N * N);
   StdDraw.setPenRadius(.01);
   for (int i = 1; i <= N; i++) {
     StdDraw.point(i, i);
     StdDraw.point(i, i * i);
     StdDraw.point(i, i * Math.log(i));
   }
 }
예제 #4
0
  // init
  private static void init() {
    if (frame != null) frame.setVisible(false);
    frame = new JFrame();
    offscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    onscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    offscreen = offscreenImage.createGraphics();
    onscreen = onscreenImage.createGraphics();
    setXscale();
    setYscale();
    offscreen.setColor(DEFAULT_CLEAR_COLOR);
    offscreen.fillRect(0, 0, width, height);
    setPenColor();
    setPenRadius();
    setFont();
    clear();

    // add antialiasing
    RenderingHints hints =
        new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    offscreen.addRenderingHints(hints);

    // frame stuff
    ImageIcon icon = new ImageIcon(onscreenImage);
    JLabel draw = new JLabel(icon);

    draw.addMouseListener(std);
    draw.addMouseMotionListener(std);

    frame.setContentPane(draw);
    frame.addKeyListener(std); // JLabel cannot get keyboard focus
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // closes all windows
    // frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);      // closes only current window
    frame.setTitle("Standard Draw");
    frame.setJMenuBar(createMenuBar());
    frame.pack();
    frame.requestFocusInWindow();
    frame.setVisible(true);
  }
예제 #5
0
 /**
  * Set the x-scale and y-scale (a 10% border is added to the values)
  *
  * @param min the minimum value of the x- and y-scales
  * @param max the maximum value of the x- and y-scales
  */
 public static void setScale(double min, double max) {
   setXscale(min, max);
   setYscale(min, max);
 }
예제 #6
0
 /** Set the y-scale to be the default (between 0.0 and 1.0). */
 public static void setYscale() {
   setYscale(DEFAULT_YMIN, DEFAULT_YMAX);
 }