Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Halbkreis zeichnen auf Canvas (https://www.delphipraxis.net/54753-halbkreis-zeichnen-auf-canvas.html)

glkgereon 11. Okt 2005 09:17


Halbkreis zeichnen auf Canvas
 
Hi

ich versuche auf einem Canvas einen Halbkreis zu zeichnen.

bekannt sind zwei punkte...der halbkreis ist immer nach unten offen...

kann ich damit Arc oder Pie so aufrufen das ein Halbkreis rauskommt?

Kroko1999 11. Okt 2005 09:27

Re: Halbkreis zeichnen auf Canvas
 
Zitat:

Zitat von glkgereon
...

kann ich damit Arc oder Pie so aufrufen das ein Halbkreis rauskommt?

Ja :!:

glkgereon 11. Okt 2005 09:37

Re: Halbkreis zeichnen auf Canvas
 
ja, ok, du hast auf meine frage korrekt geantwortet, habe ich hatte gedacht das "Wie?" sei bereits implizit dabei gewesen :-D

also nochmal ganz explizit:

Wie geht es denn?

Kroko1999 11. Okt 2005 09:45

Re: Halbkreis zeichnen auf Canvas
 
Delphi-Quellcode:
  Canvas.Pen.Color := 0;
  canvas.Brush.COlor := ClYellow;
  Canvas.Ellipse (10,10,310,210);
  Canvas.Pen.Color := $FFFFFF;;
  canvas.Brush.COlor := ClGReen;
  Canvas.Pie (10,10,310,210,
              310,110,
              10,110);
TCanvas.Pie + F1

marabu 11. Okt 2005 09:51

Re: Halbkreis zeichnen auf Canvas
 
Hallo Gereon,

wenn deine Punkte P3 (x1, y1) und P4 (x4, y4) sind und einen Halbkreis von P3 nach P4 (gegen den Uhrzeigersinn) aufspannen, dann bestimme zuerst den Mittelpunkt M (x, y) und den Radius r deines Halbkreises: x = (x4 - x3)/2, y = (y4 - y3)/2 und r = sqrt(sqr(x4 - x3) + sqr(y4 - y3))/2. Aus den gefundenen Größen kannst du dann das bounding rectangle des Kreises ermitteln, welches durch P1 und P2 aufgespannt wird: x1 = x - r, y1 = y - r und x2 = x + r, y2 = y + r. Jetzt hast du alle Parameter für die Methode Arc des Canvas. Du wirst aber nicht drum herum kommen, meine Anleitung zu überprüfen, da ich keine Garantie übernehmen kann...

Grüße vom marabu

glkgereon 11. Okt 2005 09:54

Re: Halbkreis zeichnen auf Canvas
 
mein tipp der Hilfe:

Zitat:

TCanvas.Pie Methode

Zeichnet einen Abschnitt der Ellipse, die durch das Rechteck (X1, Y1) und (X2, Y2) begrenzt ist.
Klasse
TCanvas

Syntax


[Delphi] public procedure Pie(X1: Integer, Y1: Integer, X2: Integer, Y2: Integer, X3: Integer, Y3: Integer, X4: Integer, Y4: Integer);


Beschreibung
Mit der Methode Pie können Sie ein Form zeichnen, deren Form einem Stück Torte ähnelt. Die Form wird durch die Ellipse definiert, die vom Rechteck (X1, Y1) und (X2, Y2) umgeben ist. Den zu zeichnenden Abschnitt begrenzen zwei Linien, die vom Zentrum der Ellipse ausgehen und durch die Punkte (X3, Y3) und (X4, Y4) führen.

Die Form wird mit dem aktuellen Stift gezeichnet und unter Verwendung des aktuellen Pinsels gefüllt.

Hinweis: Unter Windows 95 oder Windows ME dürfen die Summen X1 + X2 und Y1 + Y2 den Wert 32768 nicht überschreiten. Das gleiche gilt für die Summe X1 + X2 + Y1 + Y2.

Verwandte Informationen
Arc
Brush
Chord
Pen
toll :roll:

Stimmt das so?
also zwei punkte und radius?
oder hab ich da was vertauscht?
Code:
Canvas.Pie(10,10,310,210,310,110,10,110);
//         X1 Y1 X2  Y2  X2  Rad X1 Rad
Edit: BUG!!! der Delphi-Tag wird immer in Pre umgewandelt :(

glkgereon 11. Okt 2005 10:02

Re: Halbkreis zeichnen auf Canvas
 
Zitat:

Zitat von marabu
Hallo Gereon,

wenn deine Punkte P3 (x1, y1) und P4 (x4, y4) sind und einen Halbkreis von P3 nach P4 (gegen den Uhrzeigersinn) aufspannen, dann bestimme zuerst den Mittelpunkt M (x, y) und den Radius r deines Halbkreises: x = (x4 - x3)/2, y = (y4 - y3)/2 und r = sqrt(sqr(x4 - x3) + sqr(y4 - y3))/2. Aus den gefundenen Größen kannst du dann das bounding rectangle des Kreises ermitteln, welches durch P1 und P2 aufgespannt wird: x1 = x - r, y1 = y - r und x2 = x + r, y2 = y + r. Jetzt hast du alle Parameter für die Methode Arc des Canvas. Du wirst aber nicht drum herum kommen, meine Anleitung zu überprüfen, da ich keine Garantie übernehmen kann...

Grüße vom marabu

ja, das kommt mir aus der schule alles bekannt vor :)

allerdings bringt folgender Code schon fast das richtige ergebnis:

Delphi-Quellcode:
Canvas.Pie(X1,Y1,X2,Y2,X1,(Y1+Y2) div 2,X2,(Y1+Y2) div 2);
leider geht der halbkreis nach unten :(

edit:
bei folgenden werten:
X1 = 10
Y1 = 40
X2 = 90
Y2 = 50

marabu 11. Okt 2005 10:16

Re: Halbkreis zeichnen auf Canvas
 
Hallo Gereon,

die Punkte müssen vorsortiert werden, damit der Kreis bzw. Kreisbogen richtig gezeichnet wird - von (X1, Y1) nach (X2, Y2) gegen den Uhrzeigersinn! Und konsultiere mal die Online-Hilfe zu den Parametern von Pie() bzw. Arc().

Zitat:

Zitat von glkgereon
allerdings bringt folgender Code schon fast das richtige ergebnis

fast richtig ist bei zweiwertiger Logik mit falsch gleich zu setzen...

marabu

glkgereon 11. Okt 2005 10:20

Re: Halbkreis zeichnen auf Canvas
 
Zitat:

Zitat von marabu
Hallo Gereon,

die Punkte müssen vorsortiert werden, damit der Kreis bzw. Kreisbogen richtig gezeichnet wird - von (X1, Y1) nach (X2, Y2) gegen den Uhrzeigersinn! Und konsultiere mal die Online-Hilfe zu den Parametern von Pie() bzw. Arc().

ok, es funktioniert jetzt, nachdem ich alle x2 gegen x1 und y1 gegen y2 und umgekehrt getauscht hab...
Delphi-Quellcode:
Canvas.Pie(X2,Y2,X1,Y1,X2,(Y1+Y2) div 2,X1,(Y1+Y2) div 2);
//(X1|Y1) Punkt links oben
//(X2|Y2) Punkt rechts unten
Zitat:

Zitat:

Zitat von glkgereon
allerdings bringt folgender Code schon fast das richtige ergebnis

fast richtig ist bei zweiwertiger Logik mit falsch gleich zu setzen...

marabu
da hst du zwar recht, aber es ist nicht zweiwertig...

es gibt

- ganz falsch
- man sieht was es werden soll
- eigentlich richtig
- richtig

und das gehörte in die kategorie eigentlich richtig :mrgreen:

tigerman33 11. Okt 2005 11:31

Re: Halbkreis zeichnen auf Canvas
 
Zitat:

- ganz falsch
- man sieht was es werden soll
- eigentlich richtig
- richtig
Ich würde das noch etwas erweitern:
Delphi-Quellcode:
+-> -ganz falsch
|   -man sieht was es werden soll
|   -eigentlich richtig
|   -richtig
+-- -Erkenntnis
:mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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