Zappa Posted October 17, 2013 Share Posted October 17, 2013 (edited) import java.applet.*; import java.awt.*; import java.awt.event.*; public class Bezier extends Applet implements MouseListener, MouseMotionListener, Runnable { double[] [] point = new double [5] [2]; int dragged; Thread t; Graphics b; Image offscreen; int mode; public void init () { mode = 3; dragged = -1; for (int i = 0 ; i < point.length ; i++) { point [i] [0] = (int) (Math.random () * 800); point [i] [1] = (int) (Math.random () * 600); } setFocusable (true); addMouseListener (this); addMouseMotionListener (this); t = new Thread (this); t.start (); offscreen = createImage (800, 600); b = offscreen.getGraphics (); } // init method public void update (Graphics g) { paint (g); } public void run () { while (true) { repaint (); try { t.sleep (10); } catch (InterruptedException e) { } } } public void paint (Graphics g) { b.setColor (Color.white); //clears the buffer b.fillRect (0, 0, 800, 600); b.setColor (Color.red); b.fillRect (0, 0, 100, 30); b.setColor (Color.black); switch (mode) { case 1: b.drawString ("Adding nodes", 10, 20); break; case 2: b.drawString ("Deleting nodes", 10, 20); break; case 3: b.drawString ("Moving nodes", 10, 20); break; } for (int i = 0 ; i < point.length ; i++) { b.fillOval ((int) (point [i] [0] - 10), (int) (point [i] [1] - 10), 20, 20); } b.setColor (Color.blue); for (int i = 0 ; i < point.length - 1 ; i++) { b.drawLine ((int) (point [i] [0]), (int) (point [i] [1]), (int) (point [i + 1] [0]), (int) (point [i + 1] [1])); } double[] current = new double [2]; b.setColor (Color.green); for (double t = 0 ; t <= 1 ; t += 0.0005) { current = Bez (t, point); b.fillOval ((int) current [0] - 2, (int) current [1] - 2, 4, 4); } g.drawImage (offscreen, 0, 0, this); } // paint method public double[] Bez (double t, double[] [] point) { if (point.length == 1 /*|| t < 0 || t > 1*/) { double[] New = new double [2]; New [0] = point [0] [0]; New [1] = point [0] [1]; return New; } double[] [] New = new double [point.length - 1] [2]; for (int i = 0 ; i < New.length ; i++) { New [i] [0] = ((1 - t) * point [i] [0]) + (t * point [i + 1] [0]); New [i] [1] = ((1 - t) * point [i] [1]) + (t * point [i + 1] [1]); } return Bez (t, New); } public void mouseClicked (MouseEvent e) { } public void mouseMoved (MouseEvent e) { } public void mouseReleased (MouseEvent e) { dragged = -1; } public void mouseEntered (MouseEvent e) { } public void mouseExited (MouseEvent e) { } public void mousePressed (MouseEvent e) { if (e.getX () >= 0 && e.getX () <= 100 && e.getY () >= 0 && e.getY () <= 30) { // red button was clicked switch (mode) { case 1: mode = 2; break; case 2: mode = 3; break; case 3: mode = 1; break; } // switch (mode) } // if (e.getX () >= 0 && e.getX () <= 100 && e.getY () >= 0 && e.getY () <= 30) // mode: 1=add; 2=delete; 3=move else if (mode == 1) { dragged = -1; double[] [] temp = point; point = new double [temp.length + 1] [2]; for (int i = 0 ; i < temp.length ; i++) { point [i] [0] = temp [i] [0]; point [i] [1] = temp [i] [1]; } // for (int i = 0 ; i < temp.length ; i++) point [point.length - 1] [0] = e.getX (); point [point.length - 1] [1] = e.getY (); } // if (mode == 1) else if (mode == 2) { dragged = -1; for (int i = 0 ; i < point.length ; i++) { if (Dist ((double) e.getX (), (double) e.getY (), point [i] [0], point [i] [1]) <= 10) { // delete this index for (int j = i ; j < point.length - 1 ; j++) { point [j] [0] = point [j + 1] [0]; point [j] [1] = point [j + 1] [1]; } // for (int j = i ; j < point.length ; j++) double[] [] temp = point; point = new double [temp.length - 1] [2]; for (int j = 0 ; j < point.length ; j++) { point [j] [0] = temp [j] [0]; point [j] [1] = temp [j] [1]; } // for (int j = 0 ; j < point.length ; j++) } // if (Dist ((double) e.getX (), (double) e.getY (), point [i] [0], point [i] [1]) <= 10) } // for (int i = 0 ; i <= point.length ; i++) } // else if (mode == 2) else if (mode == 3) { for (int i = 0 ; i <= point.length ; i++) { try { if (Dist ((double) e.getX (), (double) e.getY (), point [i] [0], point [i] [1]) <= 10) { dragged = i; } // if (Dist ((double) e.getX (), (double) e.getY (), point [i] [0], point [i] [1]) <= 10) } // try catch (Exception ex) { } // catch (Exception ex) } // for (int i = 0 ; i <= point.length ; i++) } } public double Dist (double x1, double y1, double x2, double y2) { return Math.pow (Math.pow (x2 - x1, 2) + Math.pow (y2 - y1, 2), 0.5); } public void mouseDragged (MouseEvent e) { if (dragged != -1) { point [dragged] [0] = e.getX (); point [dragged] [1] = e.getY (); } } } Edited October 19, 2013 by Zappa Link to comment Share on other sites More sharing options...
Mr Asshole Posted October 17, 2013 Share Posted October 17, 2013 You wrote this or ported it over? Link to comment Share on other sites More sharing options...