# zeichnen einer funktion mit java



## Ang (7. November 2004)

Hallo,

ich programmiere seit kurzem mit Java, und nun habe ich ein Problem, und zwar:

ich würde gerne eine graphen von einer quadratischen gleichung (ax²bxc) in ein koordinatensystem zeichnen, dass koordinatensystem zu machen ist kein problem ich habe schon programmiert, dass man, nachdem man die werte eingegeben hat, die jeweilige x- und y-position ausgerechnet wird. das sieht bei mir so aus: 



for (double i = 0; i < 100; ) 
{ 

Endwert= ((WertA*(i*i))+(WertB*i)+(WertC)); <--Berechnung des x-wertes
xPosition = i;
yPosition = Endwert;
<----hier müsste gezeichnet werden
i = i + 0.5;
}


allerdings habe ich keine ahnung wie ich das jetzt zeichnen kann. es soll ja immer der aktuelle x- und y-wert eingezeichnet werden. ich habe schon überall nach lösungen gesucht, und da steht immer, dass man mit draw zeichnen kann...aber wie genau soll das gehen...vor allem soll er ja nicht einen punkt beim x und beim y wert machen, sondern in dem koordintatensystem alle 0,5 einheiten einen punkt bei dem xwert machen,

wäre dankbar für eine kleine erklärung.


----------



## Snape (8. November 2004)

Moin,
ich kenne keinen anderen Weg, als per drawLine oder drawPolygon (API: Graphics/Graphics2D) die Kurve zu zeichnen. Und eigentlich sollte es genügen, für jeden Punkt zu zeichnen, für x/y-Koordinate + 0.5 wird es nichts geben.


----------



## Thomas Darimont (8. November 2004)

Hallo!

Schau mal hier:

```
package de.tutorials;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import javax.swing.JFrame;

public class FunctionPlotter extends JFrame {

	private GeneralPath path;

	private int x = 320;

	private int y = 240;

	public FunctionPlotter() {
		super("FunctionPlotter");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
		setSize(x, y);
		setVisible(true);
	}

	public void paint(Graphics g) {
		super.paint(g);
		drawCross(g);
		drawFunction(g);
	}

	private void drawCross(Graphics g) {
		g.drawLine(0, y / 2, x, y / 2);
		g.drawLine(x / 2, 0, x / 2, y);
	}

	private void drawFunction(Graphics g) {
		if (path == null) {
			path = new GeneralPath();
			path.moveTo(0, y / 2);
			float halfY = y / 2;
			float halfX = x / 2;
			float scale = 180;

			//f(x) = x ^2
			for (int i = (int) -halfX; i < halfX; i++) {
				//Mit divsion durch scale skalieren wir die Funktionswerte auf
				//"Bildschirmfreundliche" Dimensionen...
				path.lineTo(halfX + i, halfY - (i * i) / scale);
			}
		}
		Graphics2D g2d = (Graphics2D) g;
		g2d.draw(path);
	}

	public static void main(String[] args) {
		new FunctionPlotter();
	}
}
```

Gruß tom


----------

