AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionen mit Paintbox zeichnen

Ein Thema von Konstantin H. · begonnen am 6. Mär 2009 · letzter Beitrag vom 11. Mär 2009
Antwort Antwort
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#1

Funktionen mit Paintbox zeichnen

  Alt 6. Mär 2009, 17:37
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:
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;
Zuerst bitte ich euch mir zu helfen die Striche, die x und y Werte anzeigen, hinzukriegen.
So soll das Programm aussehen.
Miniaturansicht angehängter Grafiken
programm_786.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Funktionen mit Paintbox zeichnen

  Alt 6. Mär 2009, 17:56
x1=X minimum(negativ)
x2=X maximum
y1=Y minimum(negativ)
y2=Y maximum
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Funktionen mit Paintbox zeichnen

  Alt 7. Mär 2009, 08:53
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?
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Funktionen mit Paintbox zeichnen

  Alt 7. Mär 2009, 12:21
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
  Mit Zitat antworten Zitat
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Funktionen mit Paintbox zeichnen

  Alt 7. Mär 2009, 17:17
was ich noch erstmal brauche, sind die striche auf der X und Y achse. Das Wert gx zeigt zeigt einen Abstand zwischen einzelnen werten.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Funktionen mit Paintbox zeichnen

  Alt 7. Mär 2009, 17:34
Striche zeichnest du mit .MoveTo und .LineTo, so wie du's bereits in deinem Code, den du da gepostet hast, gemacht hast?
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: Funktionen mit Paintbox zeichnen

  Alt 7. Mär 2009, 22:36
mit dem striche- zeichnen würde ich das so in etwa machen (lässt sich sicher noch optimieren):

Delphi-Quellcode:
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;
ich hoffe, ich hab dich richtig verstanden...

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Funktionen mit Paintbox zeichnen

  Alt 10. Mär 2009, 18:19
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:
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.
Danke für alle!
Miniaturansicht angehängter Grafiken
fertig_526.jpg  
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Funktionen mit Paintbox zeichnen

  Alt 10. Mär 2009, 20:53
Hehe, Gratulation!

Was macht die weisse Stelle da auf der Y-Achse?
  Mit Zitat antworten Zitat
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Funktionen mit Paintbox zeichnen

  Alt 11. Mär 2009, 09:13
Zitat von nuclearping:
Hehe, Gratulation!

Was macht die weisse Stelle da auf der Y-Achse?

Weiß nicht^^ Noch mal auf "KS Zeichnen" gedrückt, und die weisse Stelle war weg)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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