| Rexxos |
Verfasst am: 07. Sep 2006 01:15 Titel: Mathematische Frage / Kugelhülle |
|
Hallo Leute !
Habe folgendes Problem:
Ich habe eine Menge aus ca. 2 Mio. Punkten mit gegebenen X,Y,Z Koordinaten (in einer Datenbank). Ich möchte jetzt für einen Punkt A alle Nachbarpunkte innerhalb einer Entfernung von max E einheiten finden.
Gibt es eine schnellere Methode alle Punkte innerhalb einer Kugelhülle zu finden ???
Derzeit gehe ich folgendermassen vor (ich weiss nicht unbedingt elegant aber es funktioniert):
Ich suche alle Punkte die in einem Kubus um meinen Punkt A liegen:
| Zitat: | SELECT id FROM PUNKTE
WHERE
(
(X BETWEEN (Position_X-Max_Entfernung) AND (Position_X+Max_Entfernung))
AND (Y BETWEEN (Position_Y-Max_Entfernung) AND(Position_Y+Max_Entfernung))
AND (Z BETWEEN (Position_Z-Max_Entfernung) AND(Position_Z+Max_Entfernung))
) |
Aus dieser Ergebnismenge ermittle ich jetzt mit unten stehender Funktion jeweils die Entfernung der entsprechenden Punktes der Erebnismenge zum Punkt A und verwerfe alle Punkte die weiter Als MaxEntfernung entfern sind:
| Zitat: |
FUNCTION `entfernung`(param1 INTEGER(11), param2 INTEGER(11))
RETURNS double
DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare Xa INT;
declare Ya INT;
declare Za INT;
declare Xb INT;
declare Yb INT;
declare Zb INT;
declare ergebnis DOUBLE;
SELECT X,Y,Z into Xa,Ya,Za FROM Punkte WHERE id = param1;
SELECT X,Y,Z into Xb,Yb,Zb FROM Punkte WHERE id = param2;
SELECT ROUND((sqrt( pow((Xa-Xb),2) + pow((Ya-Yb),2) + pow((Za-Zb),2))), 2) INTO ergebnis ;
return ergebnis;
END;
|
|
|