![]() |
Kreis zeichen --> sieht komisch aus
Hallo,
ich zeichne einen Kreis mit einer Routine, die ich mir selber ausgedacht habe. Ich finde der Kreis sieht ein bisschen kompisch aus. Was kann man dagegen tun? Hier mein Code:
Delphi-Quellcode:
Ich finde der sieht besser aus!!!
procedure TForm1.BitBtn1Click(Sender: TObject);
var i : TImage; // Image zum Anzeigen dees Kreises j : Integer; // Schleifenvariable r : Integer; // Radius x, y : Real; // x und y Werte des Kreises begin // Parameter setzen i:=Image1; r:=i.Width div 2; // Berechnungen for j := 0 to 360 do begin x:=cos(DegToRad(j)) * r + i.Width / 2; y:=sin(DegToRad(j)) * r + i.Height / 2; i.Canvas.LineTo(Round(x), Round(y)); end; end;
Delphi-Quellcode:
MFG Chris
procedure TForm1.BitBtn2Click(Sender: TObject);
var i : TImage; begin i:=Image2; i.Canvas.Ellipse(0, 0, i.Width, i.Height); end; |
Re: Kreis zeichen --> sieht komisch aus
|
Re: Kreis zeichen --> sieht komisch aus
Eventuell sagst du uns auch wie er komisch aussieht (ein Screenshot wäre eine Lösung).
Ich würde das Ganze so machen 2 Funktionen auf stellen um den Kreis zu Zeichen eine Für die Unterseite und eine Für die Oberseite. Die Funktion sieht dann wie folgt aus:
Code:
Damit sparst du die sin und cos die viel Rechen Zeit beanspruchen.
f(x) = sqrt(r² - x²) // basiert auf dem Satz des Pythagoras
mfg, Björn |
Re: Kreis zeichen --> sieht komisch aus
Naja, deshalb habe ich ja den code reingestellt, da kann dann jeder selber gucken.
|
Re: Kreis zeichen --> sieht komisch aus
Ich habe nochmal was ausprobiert. Wenn ich nicht jeden Punkt berechne sondern nur jeden achten, dann sieht es auch besser aus. und schneller gehts auch noch xD
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i : TImage; // Image zum Anzeigen dees Kreises j : Integer; // Schleifenvariable r : Integer; // Radius x, y : Real; // x und y Werte des Kreises begin // Parameter setzen i:=Image1; r:=i.Width div 2; // Berechnungen for j := 0 to 45 do begin x:=cos(DegToRad(j * 8)) * r + i.Width / 2; y:=sin(DegToRad(j * 8)) * r + i.Height / 2; i.Canvas.LineTo(Round(x), Round(y)); end; end; procedure TForm1.BitBtn2Click(Sender: TObject); var i : TImage; begin i:=Image2; i.Canvas.Ellipse(0, 0, i.Width, i.Height); end; |
Re: Kreis zeichen --> sieht komisch aus
Könnte man nicht irgendwie den Umfang berechnen, und daraus die Anzahl der Schritte ableiten, die nötig sind, um den Kreis zu zeichnen? Weiß allerdings nicht, wie das bei einer Ellipse geht :mrgreen:
|
Re: Kreis zeichen --> sieht komisch aus
Hi,
mit dem Code wirst du auch keinen exakten Kreis erzeugen, sondern nur ein regelmäßiges 360-eck. Je größer du jetzt den Radius machst, desto deutlicher wird das. Wenn du einen genaueren Kreis haben willst, musst du die Anzahl der Iterationen erhöhen. Mich wundert, dass der Kreis bei jedem achten Punkt mehr nach einem Kreis aussehen, aber ich habe gerade kein Delphi in der Nähe und ohne Screenshot sehe ich auch den Unterschied nicht. Der Vorschlag über eine Funktion nach Satz des Pythagoras wird dir wahrscheinlich bessere Ergebnisse liefern. Das solltest du zumindest mal ausprobieren. Chris |
Re: Kreis zeichen --> sieht komisch aus
Also nochmal poste ich den Link zum Bresenham-Algorithmus nicht.
Der Algorithmus ist deswegen so schnell, weil er nur 1/8 des gesamtkreises berechnen muss. Die restlichen achtel werden einfach gespiegelt. Und er ist deswegen so genau, weil er die ideale Annäherung an einen Kreis berechnet. Wenn Kreis, dann Bresenham. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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 by Thomas Breitkreuz