Funktionen mit Paintbox zeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
ich habe eine Aufgabe bekommen, ein Programm soll in einem Paintbox(400x400) ein nicht statisches Koordinatensystem und liniare Funktionen mit Angabe von "m" und "n" zeichnen. Ich habe ein bewegliches KS hingekriegt.
Delphi-Quellcode:
Zuerst bitte ich euch mir zu helfen die Striche, die x und y Werte anzeigen, hinzukriegen.
procedure TForm1.Button1Click(Sender: TObject);
var x1,x2,y1,y2,gx,gy,zx,zy,t:integer; begin //t:=0; x1:=strtoint(edit1.text); x2:=strtoint(edit2.text); y1:=strtoint(edit3.text); y2:=strtoint(edit4.text); gx:=round(400/(x1-x2)); gy:=round(400/(y1-y2)); zx:=gx*x1; zy:=gy*y1; paintbox1.canvas.pen.color:=clblack; paintbox1.canvas.Pen.Width:=2; paintbox1.canvas.moveto(0,zy); paintbox1.canvas.lineto(400,zy); paintbox1.canvas.pen.color:=clblack; paintbox1.canvas.Pen.Width:=2; paintbox1.canvas.moveto(zx,0); paintbox1.canvas.lineto(zx,400); {repeat t:=t+1; paintbox1.canvas.pen.color:=clblack; paintbox1.canvas.Pen.Width:=2; paintbox1.canvas.moveto(zx,gx*t); paintbox1.canvas.lineto(zx-10,gx*t); until (gx*t)<=400;} end; So soll das Programm aussehen. |
Re: Funktionen mit Paintbox zeichnen
x1=X minimum(negativ)
x2=X maximum y1=Y minimum(negativ) y2=Y maximum |
Re: Funktionen mit Paintbox zeichnen
Und wo ist genau das Problem? Wie du in eine PaintBox zeichnest, weißt du ja bereits. Und wie du die Koordinaten berechnest, hast du in Mathe gelernt?
|
Re: Funktionen mit Paintbox zeichnen
Wenn ich das richtig verstanden hab' ist der Ablauf unklar?
Würde zuerst das Koordinatensystem anhand der Grenzwerte zeichnen, das kannst Du ja schon. Die Daten Min/Max hast Du ja auch schon in den TEdits erfasst. Dann bei geraden Graphen einfach den kleinsten und größten Punkt (x/y) anhand der f(x) berechnen und mit moveto/lineto einzeichnen. Bei Kurven über eine Schleife mehrere Punkte (zw. min/max) berechnen und anzeigen. Hoffe hab' die Aufgabenstellung jetzt nicht falsch verstanden ;) |
Re: Funktionen mit Paintbox zeichnen
was ich noch erstmal brauche, sind die striche auf der X und Y achse. Das Wert gx zeigt zeigt einen Abstand zwischen einzelnen werten.
|
Re: Funktionen mit Paintbox zeichnen
Striche zeichnest du mit .MoveTo und .LineTo, so wie du's bereits in deinem Code, den du da gepostet hast, gemacht hast? :gruebel:
|
Re: Funktionen mit Paintbox zeichnen
mit dem striche- zeichnen würde ich das so in etwa machen (lässt sich sicher noch optimieren):
Delphi-Quellcode:
ich hoffe, ich hab dich richtig verstanden...
procedure TForm1.Button1Click(Sender: TObject);
const xoffset=300; yoffset=200; linespacing=10; var i,xp,xn,yp,yn:integer; begin paintbox1.Canvas.Rectangle(0,0,paintbox1.width-1,paintbox1.height); paintbox1.Canvas.MoveTo(xoffset,0); paintbox1.canvas.LineTo(xoffset,paintbox1.height); paintbox1.Canvas.MoveTo(0,yoffset); paintbox1.canvas.LineTo(paintbox1.width,yoffset); i:=1; repeat xp:=xoffset+i*LineSpacing; xn:=xoffset-i*LineSpacing; yp:=yoffset-i*LineSpacing; yn:=yoffset+i*LineSpacing; paintbox1.Canvas.MoveTo(xoffset-5,yp); paintbox1.Canvas.LineTo(xoffset+5,yp); paintbox1.Canvas.MoveTo(xoffset-5,yn); paintbox1.Canvas.LineTo(xoffset+5,yn); paintbox1.Canvas.MoveTo(xp,yoffset-5); paintbox1.Canvas.LineTo(xp,yoffset+5); paintbox1.Canvas.MoveTo(xn,yoffset-5); paintbox1.Canvas.LineTo(xn,yoffset+5); inc(i); until not ((yp>0) or (yn<Paintbox1.height) or (xn>0) or (xp<Paintbox1.width)); end; Gruß Frank |
Re: Funktionen mit Paintbox zeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
danke für alle eure Tipps! Ich hab am Wochenende und Montag daran gearbeitet, das Program vertig zu kriegen. Und ich habs geschafft!
Delphi-Quellcode:
Danke für alle! :dp:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; PaintBox1: TPaintBox; Label7: TLabel; Label8: TLabel; Label9: TLabel; procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public a,b,c,d,e,f,g,h,k,j,xa,xe,ya,ye,i :Integer;{ Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button2Click(Sender: TObject); Var i,s,t:integer; begin a:=strtoint(edit3.text); //kleinster x-Wert b:=strtoint(edit4.text); //größter x-Wert c:=strtoint(edit5.text); //kleinster y-Wert d:=strtoint(edit6.text); //größter y-Wert e:=paintbox1.height; //Höhe der Paintbox f:=paintbox1.width; //Weite der Paintbox g:=round(f/(b-a)); //Pixel pro Einheit in x-Richtung k:=round(e/(d-c)); //Pixel pro Einheit in y-Richtung xa:=0; //Anfang der x-Achse //ya:=e div 2; xe:=f; //Ende der x-Achse //ye:=ya; h:=(-a*g); //Nullkoordinate x-achse j:=(d*k); //Nullkoordinate y-achse with paintbox1.canvas do begin pen.color:=clblue; Pen.Width:=3; moveto(xa,j); lineto(xe,j); Brush.color:=clred; //Farbe der Pfeilspitze x-Achse polygon([point(xe,j),point(xe-10,j+5),point(xe-10,j-5)]); //Pfeil x-Achse for i:=0 to ((b-a)-0) do begin pen.color:=clgreen; //Farbe der Striche an der x-Achse Pen.Width:=3; moveto(i*g,j); lineto(i*g,j-10); //Striche an der x-Achse end; moveto(h,e); lineto(h,0); Brush.color:=clyellow; //Farbe der Pfeilspitze y-Achse polygon([point(h,0),point(h-5,10),point(h+5,10)]); //Pfeil y-Achse for i:=0 to ((d-c)-0) do begin pen.color:=clblue; //Farbe der Striche an der y-Achse Pen.Width:=3; moveto(h,i*k); lineto(h+10,i*k); //Striche an der x-Achse s:=paintbox1.top; //Abstand der oberen Kante der Paintbox von oben t:=paintbox1.left; //Abstand der linken Kante der Paintbox von links label7.left:=t+h-g; //Position von Label7 von Links label7.top:=s+j+k div 2; //Position von Label7 von oben label7.caption:='-1'; //Text von Label7 label8.left:=t+h+g; //Position von Label8 von Links //label8.top:=j; //Position von Label8 von oben label8.top:=s+j+k div 2; //Position von Label8 von oben label8.caption:='+1'; //Text von Label8 label9.left:=t+h-15; //Position von Label9 von Links //label8.top:=j; //Position von Label9 von oben label9.top:=s+j+k-10; //Position von Label9 von oben label9.caption:='-1'; //Text von Label9 end; end; end; procedure TForm1.Button3Click(Sender: TObject); begin with paintbox1.canvas do begin repaint; //Löschen der Paintbox end; end; procedure TForm1.Button1Click(Sender: TObject); Var m,n,i:integer; begin m:=strtoint(edit1.text);//Anstieg der FKT. n:=strtoint(edit2.text);//y-Achsenabschnitt der FKT. a:=strtoint(edit3.text); //kleinster x-Wert b:=strtoint(edit4.text); //größter x-Wert c:=strtoint(edit5.text); //kleinster y-Wert d:=strtoint(edit6.text); //größter y-Wert e:=paintbox1.height; //Höhe der Paintbox f:=paintbox1.width; //Weite der Paintbox g:=round(f/(b-a)); //Pixel pro Einheit in x-Richtung k:=round(e/(d-c)); //Pixel pro Einheit in y-Richtung xa:=0; //Anfang der x-Achse xe:=f; //Ende der x-Achse h:=(-a*g); //Nullkoordinate x-achse j:=(d*k); //Nullkoordinate y-achse with paintbox1.canvas do begin //Zeichnen des Graphen, es geht sicher auch einfacher moveto(h,(-n*k)+j); //Bewegung zum Koordinatenursprung lineto(h+(b*g),j-((m*b*k)+(n*k))); //Zeichnen nach rechts moveto(h,(-n*k)+j); //Bewegung zum Koordinatenursprung lineto(h-(abs(a)*g),j+(-1)*(-m*(-a)*k)+(-n*k)); //Zeichnen nach links End; end; end. |
Re: Funktionen mit Paintbox zeichnen
Hehe, Gratulation! :party:
Was macht die weisse Stelle da auf der Y-Achse? |
Re: Funktionen mit Paintbox zeichnen
Zitat:
Weiß nicht^^ Noch mal auf "KS Zeichnen" gedrückt, und die weisse Stelle war weg) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz