![]() |
Überprüfen ob Punkt im Kreis ist
Wie kann man möglichst schnell überprüfen ob ein Punkt im Kreis liegt?
Delphi-Quellcode:
center = Mitteplunkt des kreises
if Sqrt(Power(x - center.x, 2) + Power(y - center.y, 2)) <= radius then
x und y = Punkt radius = Radius |
Re: Überprüfen ob Punkt im Kreis ist
:gruebel: Was ist denn das für eine Frage?
Delphi-Quellcode:
implementation
{$R *.dfm} uses math; var center: tpoint = (x:100;y:100); const r = 50; procedure TForm1.FormPaint(Sender: TObject); begin canvas.Ellipse(center.x-r,center.Y-r,center.X+r,center.Y+r); end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Sqrt(Power(x - center.x, 2) + Power(y - center.y, 2)) <= r then caption := 'ja' else caption := 'nein'; end; end. |
Re: Überprüfen ob Punkt im Kreis ist
Zitat:
Delphi-Quellcode:
sqr(radius) ist wahrscheinlich ziemlich konstant und kann vorher berechnet werden. Wenn die Prüfungen innerhalb von x/y Schleifen erfolgen, kann man je nach Struktur sqr(x - center.x) oder sqr(y - center.y) außerhalb der Schleifen berechnen.
if sqr(x - center.x) + sqr(y - center.y) <= sqr(radius) then
Gruß Gammatester |
Re: Überprüfen ob Punkt im Kreis ist
Zitat:
Zitat:
Zitat:
Eine Frage: Wäre es möglich das mit nur Integer zu rechnen, weil bei ganzen Zahlen immer ganze Quadrate rauskommen? Zitat:
Zitat:
[edit]Nur noch ~ ein viertel! 80 Millionen mal meine Variante = ~4,7 s 80 Millionen mal gammas Variante = ~0,7 s (mit den constanten "r") [/edit] |
Re: Überprüfen ob Punkt im Kreis ist
Ich will nicht den Finger haben, aber a^2+b^2=c^2 => sqr(a^2+b^2)=c, nicht sqr(c)!
edit: und schon garnicht sqr(a)+srr(b)=sqr(c), besuche bitte nochal die 9. Klasse! Du kannst aber in jeder Schleife die Wurzel sparen, da gilt a^2>(<,=)b^2 <=> a>(<,=)b | a,b e R0+, sprich:
Delphi-Quellcode:
Hier kannst Du aber r^2 vor dem Schleifendurchlauf berechnen.
if Power(x - center.x, 2) + Power(y - center.y, 2) <= Power(r,2)
|
Re: Überprüfen ob Punkt im Kreis ist
@xZise, Harr harr, ne das war zu früh am Morgen für mich.... -.-"
Ich hatte die Frage nicht verstanden da ich ja schon eine richtige Lösung sah... harr harr :mrgreen: |
Re: Überprüfen ob Punkt im Kreis ist
Zitat:
Sqr => Square => Quadrieren Sqrt => Square Root => Wurzelziehen (Basis 2) |
Re: Überprüfen ob Punkt im Kreis ist
Ja ist mir gerade auch aufgefallen.. ich vergesse immer, dass es die funktion sqr fürs quadrieren gibt. :oops:
|
Re: Überprüfen ob Punkt im Kreis ist
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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