AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Halbkreis zeichnen auf Canvas
Thema durchsuchen
Ansicht
Themen-Optionen

Halbkreis zeichnen auf Canvas

Ein Thema von glkgereon · begonnen am 11. Okt 2005 · letzter Beitrag vom 11. Okt 2005
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 09:17
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?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 09:27
Zitat von glkgereon:
...

kann ich damit Arc oder Pie so aufrufen das ein Halbkreis rauskommt?
Ja
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 09:37
ja, ok, du hast auf meine frage korrekt geantwortet, habe ich hatte gedacht das "Wie?" sei bereits implizit dabei gewesen

also nochmal ganz explizit:

Wie geht es denn?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 09:45
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
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 09:51
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
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 09:54
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

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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 10:02
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:

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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 10:16
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 von glkgereon:
allerdings bringt folgender Code schon fast das richtige ergebnis
fast richtig ist bei zweiwertiger Logik mit falsch gleich zu setzen...

marabu
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#9

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 10:20
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 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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Halbkreis zeichnen auf Canvas

  Alt 11. Okt 2005, 11:31
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
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  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 21:52 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