Hallo Leute,
habe mal ein bisschen "gespielt" und wollte ne Grundlage für eine Funktionsdarstellung erzeugen. Möcht gern mal wissen, was ihr so davon haltet?
Hab mal gleich noch den Quelltext dabei, falls sich wer dafür interessiert
Unabhängig davon, wie groß das Fenster ist, erstellt es für eine der bis jetzt dargestellten Funktionen genau 1 Periode in das Zeichenfeld.
Allerdings sollte während der Erstellung einer Kurve das Fenster konstant bleiben ^^
Es ist natürlich noch ausbaufähig!
habe mal ein bisschen "gespielt" und wollte ne Grundlage für eine Funktionsdarstellung erzeugen. Möcht gern mal wissen, was ihr so davon haltet?
Hab mal gleich noch den Quelltext dabei, falls sich wer dafür interessiert
Unabhängig davon, wie groß das Fenster ist, erstellt es für eine der bis jetzt dargestellten Funktionen genau 1 Periode in das Zeichenfeld.
Allerdings sollte während der Erstellung einer Kurve das Fenster konstant bleiben ^^
Es ist natürlich noch ausbaufähig!
Java:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
public class Part1
extends JFrame
implements ActionListener
{
private static final long serialVersionUID = 1L;
static JPanel jpanel;
static Part1 wnd;
public static void main(String[] event)
{
wnd = new Part1();
}
public Part1()
{
setResizable(true);
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
Border bd1 = BorderFactory.createBevelBorder(BevelBorder.RAISED);
Border bd2 = BorderFactory.createEtchedBorder();
Border bd3 = BorderFactory.createCompoundBorder(bd1,bd2);
JPanel jpnl = new JPanel();
jpnl.setBorder(bd3);
jpnl.setLayout(new GridLayout(4,1));
for(int i=1;i<5;i++)
{
JButton jbutton = new JButton();
switch(i)
{
case 1: { jbutton.setText("Sinus") ; break; }
case 2: { jbutton.setText("Cosinus"); break; }
case 3: { jbutton.setText("Tangens"); break; }
case 4: { jbutton.setText("Arcsin") ; break; }
}
jbutton.addActionListener(this);
jpnl.add(jbutton);
}
add(jpnl, BorderLayout.WEST);
jpanel = new JPanel();
jpanel.setSize(400,200);
jpanel.add(new Funktion());
jpanel.validate();
add(jpanel,BorderLayout.CENTER);
pack();
}
public void actionPerformed(ActionEvent event)
{
String cmd = event.getActionCommand();
if(cmd.equals("Sinus"))
{
Funktion.function="Sinus";
}
if(cmd.equals("Cosinus"))
{
Funktion.function="Cosinus";
}
if(cmd.equals("Tangens"))
{
Funktion.function="Tangens";
}
if(cmd.equals("Arcsin"))
{
Funktion.function="Arcsin";
}
jpanel.removeAll();
jpanel.add(new Funktion());
jpanel.validate();
Funktion.th.start();
}
}
class Funktion
extends Canvas
implements Runnable
{
public static String function="";
public Dimension getPreferredSize() { return new Dimension(Part1.jpanel.getWidth()-10,Part1.jpanel.getHeight()-10); }
static Thread th;
double x=0,y=0;
private Image dbImage;
private Graphics dbGraphics;
List<Point> p = new ArrayList<Point>();
public Funktion()
{
super();
x=0;
th = new Thread(this);
}
public void run()
{
while(th.isAlive())
{
repaint();
if(x>=40*Math.PI) th.stop();
x+=Math.PI/100;
auswahl(x);
try {
th.sleep(1);
} catch (InterruptedException e) {e.printStackTrace();}
}
}
public void update(Graphics g)
{
// Double-Buffer initialisieren
if (dbImage == null)
{
dbImage = createImage(this.getSize().width,this.getSize().height);
dbGraphics = dbImage.getGraphics();
}
// Hintergrund löschen
dbGraphics.setColor(getBackground());
dbGraphics.fillRect(0,0,this.getSize().width,this.getSize().height);
// Vordergrund zeichnen
dbGraphics.setColor(getForeground());
paint(dbGraphics);
// Offscreen anzeigen
g.drawImage(dbImage,0,0,this);
}
Point px;
private void auswahl(double i)
{
double a=0;
if(function.equals("Sinus")) a=Math.sin(0.05*i);
if(function.equals("Cosinus")) a=Math.cos(0.05*i);
if(function.equals("Tangens")) a=Math.tan(0.05*i);
if(function.equals("Arcsin")) a=Math.asin(0.05*i);
y=a*(getSize().height/2-2);
px=new Point();
px.setLocation((getSize().width/(40*Math.PI))*i,-y);
p.add(px);
}
public void paint(Graphics g)
{
g.setColor(Color.red);
for(int i=0;i<p.size();i++)
{
if(i>0)
g.drawLine(p.get(i-1).x, p.get(i-1).y+getSize().height/2,p.get(i).x, p.get(i).y+getSize().height/2);
}
}
}