AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Punkt in Canvas Koordinatensystem zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Punkt in Canvas Koordinatensystem zeichnen

Ein Thema von nadery · begonnen am 24. Apr 2014 · letzter Beitrag vom 24. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2      
nadery

Registriert seit: 23. Apr 2014
9 Beiträge
 
#1

Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 12:56
http://forum.delphi-treff.de/index.p...threadID=59561 Crosspost

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:
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;
Nur fängt er bei TextOut vom Absolut punkt der ganzen Image an und nicht vom Koordinatensystem selbst.
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 13:01
Soll ich Dir die einfache Addition noch einmal erklären, oder willst Du erst noch in 3 anderen Foren fragen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#3

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 13:08
Code:
9 8 7 6 5 4 3 2 1 0    <= echte Koordinaten im Canvas
      0 1 2 3 4 5      <= dein virtuelles Koordinatensystem
Wenn du jetzt was in die 4 reinmalen willst, wie kommt man dann wohl auf die 2 des Canvas?


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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Apr 2014 um 13:12 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 14:57
Letzter Versuch:
Delphi-Quellcode:
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;
Jetzt frag mich bitte bitte bitte nicht wo die GetX und GetY herkommen..
  Mit Zitat antworten Zitat
nadery

Registriert seit: 23. Apr 2014
9 Beiträge
 
#5

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 15:40
Doch leider kein Schimmer :-/

hab das mal im zusammenhang mit set und get functions gehört..
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 16:01
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 16:06
Zuerst etwas zum Thema Lesbarkeit von Qellcodes:
Delphi-Quellcode:
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;
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.
Delphi-Quellcode:
begin
  With image1.Canvas do
  begin
    LVGroesse:= strtoint(Edit1.Text);
    LVGewicht:=strtoint(Edit2.Text);
    TextOut(LVGroesse,LVGewicht,'X');
  end;
end;
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.
Delphi-Quellcode:
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;
Hier ein Beispiel mit Sinus:
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;
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 16:19
Doch leider kein Schimmer :-/
Dann schau halt bitte mal nach was ich vorgestern in dem oben von dir verlinkten Thread unter #9 und #32 gepostet habe? Ich mein, ich will dir das nicht aufschwatzen. Ist nur eine von vielen Möglichkeiten..
  Mit Zitat antworten Zitat
nadery

Registriert seit: 23. Apr 2014
9 Beiträge
 
#9

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 16:25
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Punkt in Canvas Koordinatensystem zeichnen

  Alt 24. Apr 2014, 17:02
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:10 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