AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Koordinatensystem zeichnen und......
Thema durchsuchen
Ansicht
Themen-Optionen

Koordinatensystem zeichnen und......

Ein Thema von Bufu_Druese · begonnen am 24. Sep 2003 · letzter Beitrag vom 24. Sep 2003
Antwort Antwort
Bufu_Druese

Registriert seit: 23. Sep 2003
5 Beiträge
 
#1

Koordinatensystem zeichnen und......

  Alt 24. Sep 2003, 10:50
Hi,

Also ich soll für meinen Lehrer ein Koordinatensystem auf Knopfdruck zeichnen lassen und anschließend soll es möglich sein durch eingabe des x und y wertes in 2 edit felder einen punkt in das koo. zu zeichen.

Wer kann mir helfen???


Mfg. Bufu_Druese
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#2

Re: Koordinatensystem zeichnen und......

  Alt 24. Sep 2003, 11:16
ich würde es auf den Canvas einer TImgae Komponente zeichnen.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Koordinatensystem zeichnen und......

  Alt 24. Sep 2003, 13:28
Hallo,
hier ein kleines Quick & Dirty Beispiel.
Dürfte für die Schule reichen.
Angehängte Dateien
Dateityp: zip coord.zip (184,4 KB, 173x aufgerufen)
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Koordinatensystem zeichnen und......

  Alt 24. Sep 2003, 15:30
Zitat von the_master:
ich würde es auf den Canvas einer TImgae Komponente zeichnen.
eine Paintbox ist doch wohl besser.

Ein Beispiel(neuer 0 Punkt bei 100,100):
Also eine Paintbox nehmen und breite und höhe auf 200 setzen

Achensen zeichen:
Delphi-Quellcode:
Paintbox1.canvas.moveto(100,10);
Paintbox1.canvas.lineto(100,80);
Paintbox1.canvas.moveto(10,100);
Paintbox1.canvas.moveto(80,100);
Die Koordinaten umrechnen dürfte auch nicht das Problem sein.
z.B.: ein Punkt 10,10 soll eingezeichnet werden.
Paintbox1.canvas.pixels[100+10,100+10] := clred; So jetzt nur noch etwas "sexier" machen.(x,y und die Zahlen mit canvas.textout)

mfg
  Mit Zitat antworten Zitat
Bufu_Druese

Registriert seit: 23. Sep 2003
5 Beiträge
 
#5

Re: Koordinatensystem zeichnen und......

  Alt 24. Sep 2003, 15:51
Danke für das Programm, hast du das auch mit 4 quadranten statt nur einem??

Mfg.
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Koordinatensystem zeichnen und......

  Alt 24. Sep 2003, 17:17
Manmal hilft es wenn man sich eine Anleitung(wie z.B. meine oben) durchliest und dan das Programm selber programmiert!
Wozu programmierst du sonst wenn du eh nur fertige Programme willst?

Ich hab das Programm von oben mal überflogen und ich denke es ist schwerer das zu verstehen als selber ein neues zu schreiben.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Koordinatensystem zeichnen und......

  Alt 24. Sep 2003, 19:23
Hallo,
hier ein bisschen Kommentar
Delphi-Quellcode:
const

  idYFromBottom = 4; // Abstand von der Unterkante der TPaintBox
  idYFromTop = 4; // Abstand von der Oberkante der TPaintBox
  idXFromLeft = 4; // Abstand von der linken Kante der TPaintBox
  idXFromRight = 4; // Abstand von der rechten Kante der TPaintBox
  iTicksCount = 10; // Anzahl er Teilstriche
  iTicksLen = 4; // Länge eines Teilstriches

{$R *.DFM}

{ TForm1 }

procedure TForm1.PaintCoord;
var
  orgX : Integer; // Ursprung X
  orgY : Integer; // Ursprung Y
  iXcnt : Integer; // Zähler
  iYcnt : Integer; // Zähler
  Tick : Integer; // Max Werte der X- oer Y-Achse (für die Beschriftung)
  XAxisLen : Integer; // Länge der X-Achse
  YAxisLen : Integer; // Länge das Y-Achse;
  XPoint : Integer; // X-Koordinate des Punkte, der gezeichnet werden soll
  YPoint : Integer; // Y-Koordinate des Punktes, der gezeichnet werden soll
  TickCount : Integer; // Anzahl der Teilstriche, die gezeichnet wurden
begin
  With PBCoord.Canvas do
    begin
    // Alles löschen
    Brush.Color:=clBtnFace;
    FillRect(PBCoord.ClientRect);

    // Zeichne Koordinatensystem

    // Berechne die Ursprungskoordinaten des Koordinatensystems (das ist er Punkt(0|0) )
      // orgX:=Abstand von der linken Kante + Textbreite des Max-YWertes * 100
        // Max-YWertes * 100 damit genügend Platz für die Nachkommastelle ist
    orgX:=idXFromLeft+TextWidth(IntToStr(spedtMaxY.Value*100));
      // orgY:=Unterkante der PaintBox-Abstand von der Unterkante - Texthöhe des Max-XWertes
    orgY:=PBCoord.ClientHeight-idYFromBottom-TextHeight(IntToStr(spedtMaxX.Value))-iTicksLen;

    // Die Achslängen werden gebraucht, um die Teilstriche zu zeichnen um aus den Punktkoordinaten die
    // Pixelkoordinaten zu berechnen
    YAxisLen:=orgY-idYFromTop; // Berechne Länge der Y-Achse
    XAxisLen:=(PBCoord.ClientWidth-idXFromRight)-orgX; // Berechne Länge der Y-Achse

    // Setze die Stifteigenschaften
    Pen.Width:=1;
    Pen.Color:=clBlack;
    Pen.Style:=psSolid;
    // Zeichne die Linien
    MoveTo(orgX,orgY);
    LineTo(orgX,idYFromTop);
    MoveTo(orgX,orgY);
    LineTo(PBCoord.ClientWidth-idXFromRight,orgY);

    // Zeichne die Teilstriche auf der X-Achse
    Tick:=spedtMaxX.Value; // Tick erhält den Max-XWert
    TickCount:=1;
    For iXcnt:=1 to XAxisLen do // Schleifen beginnt bei 1, weil die Teilstriche für die 0 nicht gezeichnet werden sollen
      If iXcnt mod (XAxisLen div iTicksCount) =0 then // Wenn mod den Rest 0 ergibt soll ein Teilstrich gezeichnet werden
        begin
        MoveTo(orgX+iXcnt,orgY); // Setze Stift
        LineTo(orgX+iXcnt,orgY+iTicksLen); // Zeichne Linie
        // X-Pixelkoordinate für die Achsenbeschriftung
        // orgX+iXcnt-TextWidth(FloatToStr(Tick / iTicksCount * TickCount)) div 2
          // Ursprung+Zähler iXcnt - der halben Textbreite der Teilstrichbeschriftung
          // Mit Tick / iTicksCount * TickCount errechnet sich die Beschriftung des Teilstriches
        TextOut(orgX+iXcnt-TextWidth(FloatToStr(Tick / iTicksCount * TickCount)) div 2,orgY+iTicksLen+1,FloatToStr(Tick / iTicksCount * TickCount));
        Inc(TickCount); // Anzahl der gezeichneten Teilstriche um 1 erhöhen
        end;

    // Beschreibung für Y-Achse siehe X-Achse
    Tick:=spedtMaxY.Value;
    TickCount:=1;
    For iYcnt:=1 to YAxisLen do
      If iYcnt mod (YAxisLen div iTicksCount) =0 then
        begin
        MoveTo(orgX,orgY-iYcnt);
        LineTo(orgX-iTicksLen,orgY-iYcnt);
        TextOut(orgX-iTicksLen-TextWidth(FloatToStr(Tick / iTicksCount * TickCount))-1,orgY-iYcnt-TextHeight(IntToStr(Tick)) div 2,FloatToStr(Tick / iTicksCount * TickCount));
        Inc(TickCount);
        end;
    // Setze Punkt
    // Mit Round(XAxisLen/spedtMaxX.Value)*spedtPointX.Value wir die X-Koordinate des Punktes in Pixelkoordinaten auf der Canvas umgerechnet
    XPoint:=orgX+Round(XAxisLen/spedtMaxX.Value)*spedtPointX.Value;
    // Mit Round(YAxisLen/spedtMaxY.Value)*spedtPointY.Value wir die Y-Koordinate des Punktes in Pixelkoordinaten auf der Canvas umgerechnet
    YPoint:=orgY-Round(YAxisLen/spedtMaxY.Value)*spedtPointY.Value;
    Brush.Color:=clRed;
    Ellipse(XPoint-4,YPoint-4,XPoint+4,YPoint+4);
    end; // With PBCoord.Canvas do
end;
Die Erweiterung auf 4 Quadranten musst Du schon selber machen
  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 20:44 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