Funktionsplotter

Status
Nicht offen für weitere Antworten.
I

Info-ruler

Gast
Hallo hab versucht einen funktionsplotter zu schreiben hat auch weites gehnt geklappt .Doch der Plotter nimmt keine minus zahlen oder Kommazahlen an und desweiteren zeichnet er die parabel falsch herum. Daher möchte ich hier um hilfe Bitten um das Problem oder die Probleme zu Lösen.

Und noch was ich würde auch noch gerne ein koordinaten system einfügen auf dem die Parabel drauf gezeichnet wird.
So hier der Quelltext:

Code:
import java.awt.*;// Die Klassen die das Applet benötigt werden importiert
import java.applet.*;
import java.awt.event.*;

public class parabel //Die Klasse parabel wird erstellt
 extends Applet{//Die Klasse parabel erbt die Methoden der Klasse von Applet
	Panel pa = new Panel();//Ein Panel wird erstellt
	ZeichnenPanel pb= new ZeichnenPanel(); //Ein spezieller zum Zeichnen gedachter 
					       //wird erzeugt.
	Button b1=new Button("Start"); //Der Button b1 wird erstellt
	TextField a=new TextField("0",8);//Textfelde werden erstellt
	TextField b=new TextField("0",8);
	TextField c=new TextField("0",8);
	float af,bf,cf;//Variablen werden erstellt
	boolean Taste;


  public void init() { // Eine Befehlreinfolge wir gestartet
	setLayout(new BorderLayout());//Ab hier werden die Panel nach South´,Center,East
				      //etc. geordnet
	add("South",pa); //pa wird nach south gesetzt
	add("Center",pb);//pb wird nach center gesetzt
	pa.setBackground(Color.blue);//Panel pa erhält einen blauen Hintergrund
	pb.setBackground(Color.white);//Panel pb erhält einen gelben Hintergrund 
	pa.add(a);//Die Eingabefelder werden Panel pa zugewiesen so wie der Button
	pa.add(b);
	pa.add(c);
	pa.add(b1);
	b1.addActionListener(new b1Listener());}//Ein ActionLister wird in den
						  //Button eingebaut, das er auf
						  //einen Klick reagiert.

class b1Listener //Die Klasse b1Listener wird erstellt. 
  implements ActionListener {//Der ActionLister wird in den Button implantiert
	public void actionPerformed (ActionEvent e) {//Die Methode actionPerformed startet die 
					     	     //Reaktion e.
	String astr, bstr, cstr, xstr, ystr; //String Variablen werden erstellt
	astr = a.getText();//Die Variablen astr,bstr & cstr erhalten die Werte von a,b & c
	bstr = b.getText();
	cstr = c.getText(); 
	af=Float.valueOf(astr).floatValue();
	bf=Float.valueOf(bstr).floatValue();
	cf=Float.valueOf(cstr).floatValue();
	Taste=true; //Teste die Werte auf die Wahrheit
	pb.repaint();//Methode repaint wir in Panel pb festgelegt.
	} 
}



class ZeichnenPanel extends Panel{

public void paint(Graphics g) {
int x0,y0,x1,y1;
double x,y;
final int pixel=10;//10 Pixel entsprechen einer Einheit
final int xUrsprung=100;
final int yUrsprung=200;
x0=-xUrsprung;
x=x0;
y=af*x*x+bf*x+cf;
y0=(int)Math.round(y*10);
if(Taste){
for(int i=1;i<=100+xUrsprung;i++) { 
x1=x0+1;
x=(double)x1/pixel;
y=af*x*x+bf*x+cf;
y1=(int)Math.round(y*pixel);
g.drawLine(x0+xUrsprung,y0,x1+xUrsprung,y1);
x0=x1;
y0=y1;

	}
}
}
}}

So das wär der quelltext , ich hoffe ihr könnt mir helfen und vielen dank im vorraus.

Roar: codetags!
 

hugo

Bekanntes Mitglied
Das mit den Kommazahlen ist logisch. Bei Java müssen Kommazahlen immer durch einen Punkt getrennt werden, also muss das Komma erst umgewandelt werden. Das funktioniert ganz einfach mit replace:
Code:
astr = a.getText();
astr = astr.replace(',', '.');

Mit dem Minus, kann ich dir nicht erklären, aber zum umwandeln von einem String in einen Float macht sich die statische Methode parseFloat() besser.

Code:
af=Float.parseFloat(astr);
 

Manfred

Bekanntes Mitglied
Eine Parabel so quasi x² hat ja nur positive Werte, sprich zu deinem Ursprung werden diese Werte dazugezählt! Und für den Computer heisst das "nach unten" daher musst du das quasi händisch korrigieren und die Ergebnisse mal -1 rechnen!
 

hugo

Bekanntes Mitglied
Wenn meine grauen-Zellen mich nicht zu sehr verlassen, gab es noch eine Funktion translate() mit der du den (0,0)-Punkt einfach an die Stelle x,y setzen kannst, damit brauchst du deine Endwerte nicht mehr zu modifizieren und kannst sie, wie Manfred schon schrieb, mit der Multiplikation von -1 einfach in die richtige Richtung drehen.
 
I

Info-ruler

Gast
Ok soweit so gut.Ich muss jetzt aber noch ein Koordinaten system rein bekommen das ist zwingend not wendig weil mein lehrer dies verlang also wie mach ich das??
Fanke schon im vorraus
 

Manfred

Bekanntes Mitglied
Du meinst die X+Y Achsen?

Naja du machst dazu einfach die Linien. Eventuell noch mit Unterteilung der Einheiten.
 
I

Info-ruler

Gast
Ja aber soweit ich weiss gibt es da doch eine vordefinierte Klasse koordinatensystem
 

Manfred

Bekanntes Mitglied
Davon hab ich ehrlich gesagt noch nie was gehört!?

Aber wer weiss....

Falls es das gibt, sollte dein Code dann aber auch komplett überarbeitet werden, da es dann sicher nicht notwendig ist irgendetwas zu justieren oder umzurechnen! Aber ich glaube eigentlich nicht, dass es das gibt


PS: Beni hat mal sowas gemacht als Bibliothek

http://n.ethz.ch/student/besigg/bibliothek2.html
 

KSG9|sebastian

Top Contributor
ja..ne ueberarbeitung wär net schlecht :)
ansonsten mal dir n koordinatensystem!
g.drawLine(int startX, int startY, int endX, int endY)

g.drawString(String s, int x, int y);
 
I

Info-Ruler

Gast
Hallo war jetzt nen paar tage krank und hab da mal ne frage kann ich nicht einfach so in paint ein koordinatensystem zeichnen und dadrauf die parabel zeichnen lassen?
 
I

Info-Ruler

Gast
Kann mir vielleicht dann einer erklären wie ich ein Koordinatensystem zeichne mit vollständigem quelltext.
Würde mich über ne antwort von euch freuen .
 
G

Gast

Gast
import java.awt.*;
import java.applet.*;

public class Einstieg extends Applet
{public void paint(Graphics g)
{

int xMin = -60;
int xMax = 60;
int yMin = -30;
int yMax = 30;
g.drawLine(xMin,0,xMax,0);
g.drawLine(yMin,0,yMax,0);
}
}
So wie mach ich das das der eine Linie von oben nach unten und nicht von rechts nach links zeichnet
 
I

Info-Ruler

Gast
So ein Kollege meint so müsste es gehn aber waum laüft das dann bei mir nicht was ist falsch?

Code:
import java.awt.*;

class KS extends Canvas{


int xwert, x2wert, ywert, y2wert, x1,x2,y1,y2;
double a, b, c;

KS(double aein, double bein, double cein){
	a = aein*0.1;
	b = bein;
	c = cein*10;}


public void paint(Graphics g){
g.translate(110,110);
//X-Achse
g.drawLine(-110,0,110,0);
g.drawLine(107,-3,110,0);
g.drawLine(107,3,110,0);

g.drawLine(-100,1,-100,-1);
g.drawString("-10",-106,-2);
g.drawLine(-80,1,-80,-1);
g.drawString("-8",-84,-2);
g.drawLine(-60,1,-60,-1);
g.drawString("-6",-64,-2);
g.drawLine(-40,1,-40,-1);
g.drawString("-4",-44,-2);
g.drawLine(-20,1,-20,-1);
g.drawString("-2",-24,-2);
g.drawString("0",2,-2);
g.drawLine(20,1,20,-1);
g.drawString("2",17,-2);
g.drawLine(40,1,40,-1);
g.drawString("4",37,-2);
g.drawLine(60,1,60,-1);
g.drawString("6",57,-2);
g.drawLine(80,1,80,-1);
g.drawString("8",77,-2);
g.drawLine(100,1,100,-1);
g.drawString("10",96,-2);

//Y-Achse
g.drawLine(0,110,0,-110);
g.drawLine(-3,-107,0,-110);
g.drawLine(3,-107,0,-110);

g.drawLine(-1,-100,1,-100);
g.drawString("10",2,-95);
g.drawLine(-1,-80,1,-80);
g.drawString("8",2,-75);
g.drawLine(-1,-60,1,-60);
g.drawString("6",2,-55);
g.drawLine(-1,-40,1,-40);
g.drawString("4",2,-35);
g.drawLine(-1,-20,1,-20);
g.drawString("2",2,-15);
g.drawLine(-1,20,1,20);
g.drawString("-2",2,25);
g.drawLine(-1,40,1,40);
g.drawString("-4",2,45);
g.drawLine(-1,60,1,60);
g.drawString("-6",2,65);
g.drawLine(-1,80,1,80);
g.drawString("-8",2,85);
g.drawLine(-1,100,1,100);
g.drawString("-10",2,105);

for(xwert=-110; xwert<=110; xwert++){

	x1=xwert;
	x2=xwert+1;
	y1= (int) (a*x1*x1+b*x1+c);
	y2= (int) (a*x2*x2+b*x2+c);
	g.drawLine(x1,-y1,x2,-y2);};

}
public void neu(double aein, double bein, double cein){
	a = (aein*0.1);
	b = bein;
	c = cein*10;
	repaint();}

}


Aber ich kann den Text durch den compiler jagen nur wenn ich den anzeigen lassen will geht das net
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben