# Kurvendiskussion, Funktions-Plotter, Mathe-Programm.



## Matflasch (13. Jun 2005)

Hallo,

ich wollte mal zum Testen eine Art Funktions-Plotter machen.
Also man kann eine Funktion eingeben, z.B. 
	
	
	
	





```
f(x) = x^3+5x^2-10x+23
```
 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... 
	
	
	
	





```
[a]x^[b]+[c]x^[d]...
```
, 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


```
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());
			}
		}
	}
}
```


----------



## KSG9|sebastian (13. Jun 2005)

du musst die eingegebene funktion zeteilen..zuerst klammern..dann . und - rechnung..bei exponenrten u.s.w. natrlich anders


----------



## Beni (13. Jun 2005)

Etwas Theorie aus der FAQ gefällig :wink:


----------



## Matflasch (14. Jun 2005)

Hatte alles durchsucht, nur die FAQ hatte ich nicht angeschaut  ???:L 

Werd nun erstmal ein wenig theoretisch machen müssen   :### 

Danke!

Ich werd auf jeden fall probieren, was leichtes erstmal hinzubekommen *g*

Mfg, Matflasch


----------

