AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Objekte mit X/Y Werten die sich "nähern"?
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte mit X/Y Werten die sich "nähern"?

Ein Thema von Angel4585 · begonnen am 23. Nov 2005 · letzter Beitrag vom 23. Nov 2005
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Objekte mit X/Y Werten die sich "nähern"?

  Alt 23. Nov 2005, 12:46
Hallo zusammen.

Ich habe mehrere Objekte, jeweils mit X und Y Eigenschaften.
Auf welche Methode finde ich jetzt am schnellsten raus ob sich zwei Objekte überschneiden,
bzw. sich zu "nahe" kommen?

Also ein ObjektA hat x = 10 und Y = 10

Jetzt ist irgendwo ein ObjektX mit den Werten X= 12 und Y = 12, oder X= 8 und Y = 8, oder X= 8 und Y = 12.

Also ObjektX ist eben in der Nähe von ObjektA.

Und ObjektA soll irgendwie prüfen, ob sich irgendein Objekt(z.B.ObjektX) in diesem bestimmten Bereich um ObjektA(sich selbst) befindet.

Bisher hab ich das ungefähr so:
if SQRT(Abs(Self.X-Ziel.X)*Abs(Self.X-Ziel.X)+Abs(Self.Y-Ziel.Y)*Abs(Self.Y-Ziel.Y)) < 10 then
Weis jemand eine Effizientere Möglichkeit dafür?

Danke schonmal

(PS: Sorry, ist vielleicht bissl kompliziert erklärt)
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
shmia

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

Re: Objekte mit X/Y Werten die sich "nähern"?

  Alt 23. Nov 2005, 13:06
Die Entfernung zweier Punkt wird mit Pythagoras berechnet:
entfernung := Round(Sqrt( Sqr(Self.X-Ziel.X)+Sqr(Self.Y-Ziel.Y))); Du kannst Rechenzeit sparen, indem du das Sqrt (=Wurzelziehen) weglässt und stattdessen
die gewünschte Entfernung quadrierst:
Delphi-Quellcode:
Sollentfernung := 10;
Sollentfernung2 := Sqr(Sollentfernung);
if Sqr(Self.X-Ziel.X)+Sqr(Self.Y-Ziel.Y) < Sollentfernung2 then
   ShowMessage('Entfernung ist < 10');
Andreas
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Objekte mit X/Y Werten die sich "nähern"?

  Alt 23. Nov 2005, 13:11
Gut soweit zum SQRT mein eigentliches Problem ist das ich etliche solcher Objekte in einer Objectlist habe und nicht mit einer For Schleife jedes einzelne vergleichen will, sondern ne effizientere Methode suche.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Objekte mit X/Y Werten die sich "nähern"?

  Alt 23. Nov 2005, 14:09
Hi,
du kannst da wahrscheinlich ne Menge optimieren, wobei es dann an anderer Stelle einfach Zeit kostet. So könntest du deine Liste vorsortieren. Müsstest du mal gucken wieviel Zeit das kostet (wenn du eine durchmischte Liste sortierst, wenn du sortiert einfügst...). Wenn du so etwas hast, dann musst du natürlich nur schauen ob dein i-tes Objekt (Liste = 0..n, i >= 0, i <= n) schon weiter weg ist als du möchtest, dann ist halt alles dahinter erst recht weiter weg.
Dann könntest du auch das maximale x (y = 0) und das maximale y (x = 0) ausrechnen, dass ein Objekt haben kann bevor der Abstand größer als dein Wert ist. (Gut, ist der Wert, da gibts nichts zu rechnen) und da kannst du dann schon mal alles rausschmeissen oder nicht betrachten, was ein größeres X oder Y hat.

Wie effizient was davon ist, kommt natürlich auf die Anzahl der Objekte und die zu erwartende Entfernung der Objekte zur Referenz an. Was assymptotisch immer am schnellsten ist hab ich mir natürlich nicht überlegt, aber ich denke in deinem Fall sollte es wirklich von der erwarteten Anordnung abhängen (ausser du hast wirklich 100.000de Objekte, sonst können große Konstanten die echte Laufzeit doch gut verfälschen).

Gruß Der Unwissende
  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:26 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