![]() |
Punkt in Canvas Koordinatensystem zeichnen
![]() Wie setzte ich einen Punkt in ein mit Canvas gezeichnetes Koordinatensystem? Die Koordinaten sollen aus zwei Edit Feldern entnommen werden. Ich hatte an sowas hier Gedacht...
Delphi-Quellcode:
Nur fängt er bei TextOut vom Absolut punkt der ganzen Image an und nicht vom Koordinatensystem selbst.
procedure TForm2.Button1Click(Sender: TObject);
var LVGroesse:integer; LVGewicht:integer; begin With image1.Canvas do begin LVGroesse:= strtoint(Edit1.Text); LVGewicht:=strtoint(Edit2.Text); TextOut(LVGroesse,LVGewicht,'X'); end; end; Die Y-Koordinate von TextOut geht ja auch immer nach unten und nicht nach oben? Jemand ne bessere Idee als das mit TextOut zu machen oder ein Vorschlag wie ich es mit TextOut machen kann? Danke |
AW: Punkt in Canvas Koordinatensystem zeichnen
Soll ich Dir die einfache Addition noch einmal erklären, oder willst Du erst noch in 3 anderen Foren fragen?
|
AW: Punkt in Canvas Koordinatensystem zeichnen
Code:
Wenn du jetzt was in die 4 reinmalen willst, wie kommt man dann wohl auf die 2 des Canvas?
9 8 7 6 5 4 3 2 1 0 <= echte Koordinaten im Canvas
0 1 2 3 4 5 <= dein virtuelles Koordinatensystem Erstes Beispiel mit einer 1:1-Skalierung ... eventuell muß Diese auch noch mit eingerechnet werden.
Code:
9 8 7 6 5 4 3 2 1 0 <= echte Koordinaten im Canvas
0 2 4 6 8 <= dein virtuelles Koordinatensystem mit 2 Schritten pro Pixel |
AW: Punkt in Canvas Koordinatensystem zeichnen
Letzter Versuch:
Delphi-Quellcode:
Jetzt frag mich bitte bitte bitte nicht wo die GetX und GetY herkommen..
var
Groesse, Gewicht: double; P: TPoint; C: char; begin C := 'X'; Groesse := StrToFloatDef(Edit1.Text, 0); Gewicht := StrToFloatDef(Edit2.Text, 0); P := Point(GetX(Groesse), GetY(Gewicht)); P.X := P.X - Image1.Canvas.TextWidth(C) div 2; P.Y := P.Y - Image1.Canvas.TextHeight(C) div 2; Image1.Canvas.TextOut(P.X, P.Y, C); end; |
AW: Punkt in Canvas Koordinatensystem zeichnen
Doch leider kein Schimmer :-/
hab das mal im zusammenhang mit set und get functions gehört.. |
AW: Punkt in Canvas Koordinatensystem zeichnen
Nun, da ich nicht alles verfolgt habe gehe ich davon aus, daß Groesse und Gewicht in die zu deinem Koordinatensystem passenden x und y Werten übersetzt werden.
Wobei natürlich auch der senkrechte und waagerechte Versatz mit berücksichtigt werden kann/sollte/muß. An diese Stelle wird dan ein "X" geschrieben. Hat was die Idee Gruß K-H |
AW: Punkt in Canvas Koordinatensystem zeichnen
Zuerst etwas zum Thema Lesbarkeit von Qellcodes:
Delphi-Quellcode:
Es hat sich so eingebürgert (es gibt Sprachen da soll es ohne gar nicht funktionieren, wie z.B. Phyton), dass man Blöcke einrückt. Dadurch erkennt man was zu was gehört. Bei so einem kurzen Code geht es noch, aber irgendwann wird es unübersichtlich und man verbraucht die Hälfte der Zeit damit den Code im Kopf zu strukturieren.
procedure TForm2.Button1Click(Sender: TObject);
var LVGroesse:integer; LVGewicht:integer; begin With image1.Canvas do begin LVGroesse:= strtoint(Edit1.Text); LVGewicht:=strtoint(Edit2.Text); TextOut(LVGroesse,LVGewicht,'X'); end; end;
Delphi-Quellcode:
Zu der Frage. Die Koordinaten der Leinwand in Delphi (also Canvas) liegen oben links, also klein ist links und oben, größer wird es nach rechts unten. Will man in einem Koordinatensystem zeichnen, muss man die Y Werte von dem Koordinatensystem abziehen, X dazu addieren.
begin
With image1.Canvas do begin LVGroesse:= strtoint(Edit1.Text); LVGewicht:=strtoint(Edit2.Text); TextOut(LVGroesse,LVGewicht,'X'); end; end;
Delphi-Quellcode:
Hier ein Beispiel mit Sinus:
procedure TForm1.Button1Click(Sender: TObject);
var BildWeite, BildHoehe, KoordinateX0, KoordinateY0, X, Y: Integer; begin //Bildbreite und -Höhe ermitteln. Die Koordinalten 0/0 sind links oben BildWeite := Canvas.ClipRect.Right - Canvas.ClipRect.Left; BildHoehe := Canvas.ClipRect.Bottom - Canvas.ClipRect.Top; //Das Koordinatenkreuz (Annahme: Mitte vom Bild) KoordinateX0 := BildWeite div 2; KoordinateY0 := BildHoehe div 2; Canvas.MoveTo(0, KoordinateY0); Canvas.LineTo(BildWeite, KoordinateY0); Canvas.MoveTo(KoordinateX0, 0); Canvas.LineTo(KoordinateX0, BildHoehe); //Position vertikal 70 und horizontal 50 in der Koordinate setzten //Hier reicht es den Wert zum Koordinatenkreuz (Nullpunkt X) dazu zu addieren X := KoordinateX0 + 70; //Hier muss der Wert vom Koordinatenkreuz (Nullpunkt Y) abgezogen werden Y := KoordinateY0 - 50; Canvas.Pixels[X, Y] := clBlack; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var BildWeite, BildHoehe, KoordinateX0, KoordinateY0, X, Y, i: Integer; FaktorX, FaktorY: Real; begin //Bildbreite und -Höhe ermitteln. Die Koordinalten 0/0 sind links oben BildWeite := Canvas.ClipRect.Right - Canvas.ClipRect.Left; BildHoehe := Canvas.ClipRect.Bottom - Canvas.ClipRect.Top; //Das Koordinatenkreuz (Annahme: Mitte vom Bild) KoordinateX0 := BildWeite div 2; KoordinateY0 := BildHoehe div 2; Canvas.MoveTo(0, KoordinateY0); Canvas.LineTo(BildWeite, KoordinateY0); Canvas.MoveTo(KoordinateX0, 0); Canvas.LineTo(KoordinateX0, BildHoehe); //Faktoren passen die Werte an die Leinwand an, da zB Sin max 1 liefert, was nur ein Pixel wäre FaktorX := BildWeite / (2 * Pi); FaktorY := KoordinateY0 / SIN(Pi / 2); for i := Round(-Pi * FaktorX) to Round(Pi * FaktorX) do begin X := KoordinateX0 + i; Y := KoordinateY0 - Round(Sin(i / FaktorX) * FaktorY); Canvas.Pixels[X, Y] := clBlack; end; end; |
AW: Punkt in Canvas Koordinatensystem zeichnen
Zitat:
|
AW: Punkt in Canvas Koordinatensystem zeichnen
Bjoerk hab vielen dank es funktioniert auf deine Art nur ob ich das auch alles erklären kann :p
andere frage kann ich von der der jetzigen Unit Edit Felder von der ersten ansprechen, weil wen ich davor Form1 schreibe sagt er mir er kennt sie nicht. |
AW: Punkt in Canvas Koordinatensystem zeichnen
nadery, in welcher Klasse gehst du und wie lange hast du inzwischen Delphi (Lazarus) Unterricht?
Nichts böses, ich frage das nur um dein Kenntnisstand abschätzen zu können. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz