Alle Beiträge und Antworten zu "Bézier-Kurve"
Re: Bézier-Kurve
timo - 24.07.2007, 22:11
Bézier-Kurve
Bézier-Kurve
Schreibt ein Programm in Java, welches eine Bézier-Kurve mit beliebig vielen Stützpunkten (mindestens 4) darstellen kann.
Zum darstellen (zeichnen) der Kurve verwendet das Graphics Objekt in der paint-Methode eines JPanels.
Die mitgelieferte Klasse BezierCurve enthält einige Funktionen und Kommentare, welche als Anhaltspunkte für die Implementierung verwendet werden können.
Als Beispiel können die mitgelieferten class-Files mit Hilfe der bat-Datei start.bat gestartet werden.
start.bat
java BezierCurve
BezierCurve.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class BezierCurve extends JPanel implements MouseListener
{
private Punkt[] punkte;
private int punkteAnzahl = 0;
public BezierCurve()
{
punkte = new Punkt[punkteAnzahl];
addMouseListener(this);
JFrame frame = new JFrame();
frame.setSize(1000,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(this);
frame.setVisible(true);
}
long fakultaet(int fak)
{
long returnValue = 1;
for(long i = fak; i > 1; i--)
{
returnValue *= i;
}
return(returnValue);
}
double nUeberI(int n, int i)
{
return(fakultaet(n)/(fakultaet(i)*fakultaet(n-i)));
}
public void paint(Graphics g)
{
g.setColor(Color.WHITE); // Fpllt das Fenster Weiss aus
g.fillRect(0, 0, getSize().width, getSize().height);
g.setColor(Color.BLACK);
for(int i = 0; i < punkteAnzahl-1; i++) // Zeichnet Verbindungslinien zwischen den Punkten
{
g.drawLine((int)punkte[i].x, (int)punkte[i].y, (int)punkte[i+1].x, (int)punkte[i+1].y);
}
g.setColor(Color.RED);
// Ab hier soll die Bezier-Kurve gezeichnet werden
// Erstellt dazu eine Schleife die einen Parameter u von 0 bis 1 in Abständen von 0.01 laufen lässt
// Zeichnet einen errechneten Punkt der Kurve mit drawRect(.x, .y, 2, 2)
}
/* MouseListener */
public void mouseClicked(MouseEvent e)
{
punkteAnzahl++;
Punkt[] newPunkte = new Punkt[punkteAnzahl];
for(int i = 0; i < punkteAnzahl-1; i++)
{
newPunkte[i] = punkte[i];
}
punkte = newPunkte;
punkte[punkteAnzahl-1] = new Punkt((double)e.getX(),(double)e.getY(),0.0);
repaint();
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public static void main(String[] args)
{
new BezierCurve();
}
}
Punkt.java
public class Punkt
{
public double x;
public double y;
public double z;
public double w;
public Punkt()
{
}
public Punkt(double xWert, double yWert, double zWert)
{
x = xWert;
y = yWert;
z = zWert;
w = 1;
}
}
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken