Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Wie kann man viele Punkte schnell vergleichen?

  Alt 15. Jun 2010, 20:25
Hallo zusammen,

ich habe Punkte, die ich in einem Diagramm anzeigen lasse (verbunden ist es natürlich eine Kurve). D.h. jeder Punkt besitzt einen x- und eine y-Wert.

Nun habe ich mehrere Fenster festgelegt, mit denen ich die Kurvenabschnitte auswerte.

Ein Beispiel mit 2 Fenstern ist folgendes:

x = 12,5 bis 17,8
x = 16,9 bis 20

Ich kann beliebig viele Fenster (Rechtecke) vorgeben und ich möchte die Punkte darin schnell ausfindig machen, damit ich diese mit anderen Dingen vergleichen kann.

Würden sich die Fenster nicht überschneiden, könnte ich die Kurve in einer Schleife ein einziges Mal durchlaufen (von links nach rechts).
Da sich die Fenster überschneiden untersuche ich aktuell pro Fenster die Kurve vom niedrigsten x-Wert bis zum Ende des Fensters (dann kann ich den Suchdurchlauf natürlich abbrechen). D.h. es sind viele Vergleiche nötig, um überhaupt herauszufinden, ab wann die Kurve in das Fenster eintritt.

Ich kann nicht direkt auf die Punkte zugreifen, da ich erst herausfinden muss, welcher Punkt in welchem Fenster liegt.

Ein Zahlenbeispiel zur Verdeutlichung:

Punkte:
Code:
0    0,5    1    1,5    2    2,5    3    3,5    4    4,5    5
Die Fenster sind wie folgt definiert:
Code:
Fenster 1:
x = 0,7 bis 1,8

Fenster 2:
x = 1,4 bis 3,7
Mein Ziel ist es, den Punkt direkt vor dem Fenster und den ersten im Fenster zu ermitteln und beim Austritt ebenfalls. Hier zeige ich nur den Suchvorgang allgemein.

2 Bereiche -> 2 Schleifen:

Schleife 1 fürs 1. Fenster:
Diese läuft von x = 0 bis x = 2 und gibt mir als Werte innerhalb des Fensters 1 und 1,5 zurück.

Schleife 2 fürs 2. Fenster:
Diese läuft von x = 0 bis x = 4 und gibt mir als Werte innerhalb des Fensters 1,5 bis 3,5 zurück.

Bei tausenden Werten und vielen Fenstern kann das lange dauern.

Geht es irgendwie schneller?

Die Punkte liegen übrigens in 2 Arrays vor: in einem sind die x- und im anderen die y-Werte definiert.

Grüße, Matze
  Mit Zitat antworten Zitat