AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen ob Punkt im Kreis ist

Ein Thema von xZise · begonnen am 15. Mär 2007 · letzter Beitrag vom 15. Mär 2007
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 08:21
Wie kann man möglichst schnell überprüfen ob ein Punkt im Kreis liegt?
if Sqrt(Power(x - center.x, 2) + Power(y - center.y, 2)) <= radius then center = Mitteplunkt des kreises
x und y = Punkt
radius = Radius
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 08:30
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 08:37
Zitat von xZise:
Wie kann man möglichst schnell überprüfen ob ein Punkt im Kreis liegt?
if Sqrt(Power(x - center.x, 2) + Power(y - center.y, 2)) <= radius then center = Mitteplunkt des kreises
x und y = Punkt
radius = Radius
Auf jeden Fall schneller und einfacher ist

if sqr(x - center.x) + sqr(y - center.y) <= sqr(radius) then 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.

Gruß Gammatester
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 11:52
Zitat von turboPASCAL:
Was ist denn das für eine Frage?

Delphi-Quellcode:
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;
Was ist denn das für eine Antwort?

Zitat von xZise:
Wie kann man möglichst schnell überprüfen ob ein Punkt im Kreis liegt?
if Sqrt(Power(x - center.x, 2) + Power(y - center.y, 2)) <= radius then center = Mitteplunkt des kreises
x und y = Punkt
radius = Radius
Zitat von gammatester:
Auf jeden Fall schneller und einfacher ist

if sqr(x - center.x) + sqr(y - center.y) <= sqr(radius) then
Also quadrieren? Klingt gut!
Eine Frage: Wäre es möglich das mit nur Integer zu rechnen, weil bei ganzen Zahlen immer ganze Quadrate rauskommen?

Zitat von gammatester:
sqr(radius) ist wahrscheinlich ziemlich konstant und kann vorher berechnet werden.
Jap...

Zitat von gammatester:
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.
Ne ... Das wäre unnötig, da ich nur einmal das berechnen muss...

[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]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#5

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 12:35
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:
if Power(x - center.x, 2) + Power(y - center.y, 2) <= Power(r,2) Hier kannst Du aber r^2 vor dem Schleifendurchlauf berechnen.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 12:44
@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

Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 12:46
Zitat von Sidorion:
und schon garnicht sqr(a)+srr(b)=sqr(c), besuche bitte ....
Sqr(x) liefert das gleiche Ergebnis wie Power(x, 2)
Sqr => Square => Quadrieren
Sqrt => Square Root => Wurzelziehen (Basis 2)
Andreas
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#8

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 12:50
Ja ist mir gerade auch aufgefallen.. ich vergesse immer, dass es die funktion sqr fürs quadrieren gibt.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Überprüfen ob Punkt im Kreis ist

  Alt 15. Mär 2007, 15:58
Zitat von Sidorion:
Ja ist mir gerade auch aufgefallen.. ich vergesse immer, dass es die funktion sqr fürs quadrieren gibt.
Ich auch
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 11:57 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