import java.awt.*;import java.awt.event.*;import java.lang.Math;import java.applet.*;import java.awt.Point;public class BSpline extends Applet implements MouseListener, MouseMotionListener { Image buffer; Graphics bg; /*int var1 = 5; int var2 = 7; int var3 = 10; */ int M; int maxM; Point P[]; int drag = 0; public void init() { addMouseListener(this); addMouseMotionListener(this); setBackground(Color.white); Choice auswahl = new Choice(); auswahl.add("5"); auswahl.add("7"); auswahl.add("10"); add(auswahl); auswahl.addItemListener (new ItemListener() { public void itemStateChanged(ItemEvent e) { maxM = Integer.parseInt((String)e.getItem()); System.out.println(maxM); } }); setCursor(Cursor.getPredefinedCursor(java.awt.Cursor.CROSSHAIR_CURSOR)); this.setBounds(0, 0, 640, 480); Dimension d = getSize(); buffer = createImage(d.width, d.height); } public void start() { M = 0; P = new Point[maxM+1]; } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { double x, y; final int numberOfDivision = 100; double dt = 1.0 / (double)numberOfDivision; double c; int k; if(bg == null) bg = buffer.getGraphics(); Dimension d = getSize(); bg.setColor(Color.yellow); bg.fillRect(0, 0, d.width, d.height); if(M >= 1) { for(double t = -1.0; t < M; t += dt) { x = 0; y = 0; for(int j = -2; j <= M+2; j++) { k = j; if(k < 1) k = 1; if(k > M) k = M; c = coefficent(t - j); x += (double)P[k].x * c; y += (double)P[k].y * c; } bg.setColor(Color.red); bg.drawLine((int)x, (int)y, (int)x, (int)y); } } for(int i = 1; i <= M; i++) { if(drag == i) bg.setColor(Color.red); else bg.setColor(Color.blue); bg.fillOval(P[i].x-2, P[i].y-2, 5, 5); if(i != M) { bg.setColor(Color.blue); bg.drawLine(P[i].x, P[i].y, P[i+1].x, P[i+1].y); } } g.drawImage(buffer, 0, 0 ,this); } private double coefficent(double t) { double r; if(t < 0.0) t = -t; if(t < 1.0) r = (3.0 * t * t * t -6.0 * t * t + 4.0) / 6.0; else if(t < 2.0) r = -1.0 * (t - 2.0) * (t - 2.0) * (t - 2.0) / 6.0; else r = 0.0; return r; } public void mousePressed(MouseEvent e) { Point p = e.getPoint(); drag = 0; for(int i = 1; i <= M; i++) { if(p.x <= P[i].x +3 && p.x >= P[i].x -3 && p.y <= P[i].y +3 && p.y >= P[i].y -3)drag = i; } repaint(); } public void mouseClicked(MouseEvent e) { if(M < maxM) { M++; P[M] = e.getPoint(); } } public void mouseReleased(MouseEvent e) { drag = 0; repaint(); } public void mouseDragged(MouseEvent e) { Point p = e.getPoint(); if(drag != 0) P[drag] = p; repaint(); } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} }
init:deps-jar:Compiling 1 source file to C:\Dokumente und Einstellungen\Konto 1\JavaApplication8\build\classesC:\Dokumente und Einstellungen\Konto 1\JavaApplication8\src\BSpline.java:50: possible loss of precisionfound : doublerequired: intP = new Point[maxM+1]; 1 errorBUILD FAILED (total time: 0 seconds)