Hallo,
ich wollte mal zum Testen eine Art Funktions-Plotter machen.
Also man kann eine Funktion eingeben, z.B.
und dann wird einem dazu die Kurve angezeigt, mit Ableitungen etc.
Also alles, was man bei der Kurvendiskussion so berechnen kann.
Allerdings habe ich generell einige Probleme bei der Umsetzung. Das Achsenkreuz habe ich schon, werde ich als Code weiter unten posten. (Muss garantiert auch noch angepasst werden!)
Jedoch frage ich mich, wie ich die Funktion, wenn diese erstmal in dem Format eingelesen ist, ableiten kann.
Wie kann man mit einer solchen Funktion dann innerhalb von Java weiterarbeiten?
Es gibt ja MatheProgramme, die dies können. Frage ist nur: Wie gehen die Programme mit den Funktionen um? Die Funktionen können ja variiren, sehr stark sogar. Vorgeben will ich auch nichts..., also z.B. ein Eingabefeld...
, das ist mir zu statisch!
Habt ihr einen Ansatz für mich, wie ich mit der Funktion, die vom Benutzer in ähnlicher weise wie oben eingegeben wird, weiter rechnen kann?
Danke!
Mfg, Matflasch
ich wollte mal zum Testen eine Art Funktions-Plotter machen.
Also man kann eine Funktion eingeben, z.B.
Code:
f(x) = x^3+5x^2-10x+23
Also alles, was man bei der Kurvendiskussion so berechnen kann.
Allerdings habe ich generell einige Probleme bei der Umsetzung. Das Achsenkreuz habe ich schon, werde ich als Code weiter unten posten. (Muss garantiert auch noch angepasst werden!)
Jedoch frage ich mich, wie ich die Funktion, wenn diese erstmal in dem Format eingelesen ist, ableiten kann.
Wie kann man mit einer solchen Funktion dann innerhalb von Java weiterarbeiten?
Es gibt ja MatheProgramme, die dies können. Frage ist nur: Wie gehen die Programme mit den Funktionen um? Die Funktionen können ja variiren, sehr stark sogar. Vorgeben will ich auch nichts..., also z.B. ein Eingabefeld...
Code:
[a]x^[b]+[c]x^[d]...
Habt ihr einen Ansatz für mich, wie ich mit der Funktion, die vom Benutzer in ähnlicher weise wie oben eingegeben wird, weiter rechnen kann?
Danke!
Mfg, Matflasch
Code:
import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.JPanel;
public class Graph extends JPanel {
// Breite des Graphen
private int intWidth = 400;
// Hoehe des Graphen
private int intHeight = 400;
// Wertebereich X
private double dblValueX = 6.0d;
// Wertebereich Y
private double dblValueY = 6.0d;
public Graph() {
super();
initialize();
}
private void initialize() {
this.setBackground(java.awt.SystemColor.activeCaptionText);
this.setSize(intWidth, intHeight);
}
public void Entry(int p_width, int p_height) {
// Breite des Graphen setzen
intWidth = p_width;
// Hoehe des Graphen setzen
intHeight = p_height;
// initialisieren der Groesse
this.setSize(intWidth, intHeight);
}
protected void paintComponent(Graphics g) {
// X-Achse
g.drawLine(0, this.getHeight()/2, this.getWidth(), this.getHeight()/2);
// Y-Achse
g.drawLine(this.getWidth()/2, 0, this.getWidth()/2, this.getHeight());
// Pfeile X-Achse rechts
g.drawLine(this.getWidth(), this.getHeight()/2, this.getWidth()-5, this.getHeight()/2+5);
g.drawLine(this.getWidth(), this.getHeight()/2, this.getWidth()-5, this.getHeight()/2-5);
// Pfeile X-Achse links
g.drawLine(0, this.getHeight()/2, 5, this.getHeight()/2+5);
g.drawLine(0, this.getHeight()/2, 5, this.getHeight()/2-5);
// Pfeile Y-Achse oben
g.drawLine(this.getWidth()/2, 0, this.getWidth()/2-5, 5);
g.drawLine(this.getWidth()/2, 0, this.getWidth()/2+5, 5);
// Pfeile Y-Achse unten
g.drawLine(this.getWidth()/2, this.getHeight(), this.getWidth()/2+5, this.getHeight()-5);
g.drawLine(this.getWidth()/2, this.getHeight(), this.getWidth()/2-5, this.getHeight()-5);
int intXAchse = 0;
double dblXAchsenTeil = 0;
intXAchse = this.getWidth()/2;
dblXAchsenTeil = (double)intXAchse / dblValueX;
// X-Achse
for(int i=1; i<dblValueX; i++) {
// X-Achse Wertebereich, vertikale Striche, rechte Seite
g.drawLine(new Double(this.getWidth()/2 + i*dblXAchsenTeil).intValue(),
this.getHeight()/2-5,
new Double(this.getWidth()/2 + i*dblXAchsenTeil).intValue(),
this.getHeight()/2+5);
// X-Achse Wertebereich, Beschriftung, rechte Seite
g.drawString(String.valueOf(i*(dblValueX/dblValueX)),
new Double(this.getWidth()/2 + i*dblXAchsenTeil).intValue()-6,
this.getHeight()/2+18);
// X-Achse Wertebereich, vertikale Striche, linke Seite
g.drawLine(new Double(this.getWidth()/2 - i*dblXAchsenTeil).intValue(),
this.getHeight()/2-5,
new Double(this.getWidth()/2 - i*dblXAchsenTeil).intValue(),
this.getHeight()/2+5);
// X-Achse Wertebereich, Beschriftung, linke Seite
g.drawString(String.valueOf(i*(-(dblValueX/dblValueX))),
new Double(this.getWidth()/2 - i*dblXAchsenTeil).intValue()-8,
this.getHeight()/2+18);
}
int intYAchse = 0;
double dblYAchsenTeil = 0;
intYAchse = this.getHeight()/2;
dblYAchsenTeil = (double)intYAchse / dblValueY;
// Y-Achse
for(int i=1; i<dblValueY; i++) {
// Y-Achse Wertebereich, horizontale Striche, oben
g.drawLine(this.getWidth()/2 - 5,
new Double(this.getHeight()/2 - i*dblYAchsenTeil).intValue(),
this.getWidth()/2 + 5,
new Double(this.getHeight()/2 - i*dblYAchsenTeil).intValue());
// Y-Achse Wertebereich, Beschriftung, oben
g.drawString(String.valueOf(i*(dblValueY/dblValueY)),
this.getWidth()/2 - 22,
new Double(this.getHeight()/2 - i*dblYAchsenTeil).intValue()+5);
// Y-Achse Wertebereich, horizontale Striche, unten
g.drawLine(this.getWidth()/2 - 5,
new Double(this.getHeight()/2 + i*dblYAchsenTeil).intValue(),
this.getWidth()/2 + 5,
new Double(this.getHeight()/2 + i*dblYAchsenTeil).intValue());
// Y-Achse Wertebereich, Beschriftung, unten
g.drawString(String.valueOf(i*(-(dblValueY/dblValueY))),
this.getWidth()/2 - 28,
new Double(this.getHeight()/2 + i*dblYAchsenTeil).intValue()+5);
}
// Einheit X-Achse
g.drawString("x/e", this.getWidth() - 40, this.getHeight()/2 + 30);
// Einheit Y-Achse
g.drawString("y/e", this.getWidth()/2 - 40, 20);
Polygon t_Polygon = new Polygon();
for(int i=0; i<=5; i++) {
t_Polygon.addPoint(this.getWidth()/2 + 2*i* new Double(dblXAchsenTeil).intValue(),
this.getHeight()/2 + -2*i* new Double(dblYAchsenTeil).intValue());
}
g.drawPolygon(t_Polygon);
// Raster
for(int i= new Double(-dblValueX).intValue(); i< new Double(dblValueX).intValue(); i++) {
for(int j= new Double(-dblValueY).intValue(); j< new Double(dblValueY).intValue(); j++) {
g.drawLine(this.getWidth()/2 + i* new Double(dblXAchsenTeil).intValue(),
this.getHeight()/2 + j * new Double(dblYAchsenTeil).intValue(),
this.getWidth()/2 + i* new Double(dblXAchsenTeil).intValue(),
this.getHeight()/2 + j * new Double(dblYAchsenTeil).intValue());
}
}
}
}