Peformance bei n-DSchwerpunkt berechnen verbessern
Verfasst: Sonntag 30. Oktober 2011, 22:33
Hi,
Ich programmier mir gerade eine n-Dimensionale virtuelle Realität.
Hier berechne ich zum Beispiel den Schwerpunkt von Polytopen (n-Dimensionale polygone).
Hierzu teile ich das Polytop in Simplexe auf. und berechne dann von jedem simplex den Schwerpunkt
C = \frac{1}{n+1}\sum_{i=0}^n v_i.
Dann berechne ich auch das Volumen von den Simplexen mit mit der Formel 1/n! * det(m) wobei m die punkte sind und n die anzahl der dimensionen ist.
Die schwerpunkte bekommt man ja mit
Cx = 1/(summe_der_gewichte) * (gewicht1*schwerpunkt1[x] + gewicht2*schwerpunkt2[x] [...] )
Cy = 1/(summe_der_gewichte) * (gewicht1*schwerpunkt1[y] + gewicht2*schwerpunkt2[y] [...] )
Weil das Polytop überall die gleiche dichte hat kann ich anstatt des gewichtes auch das volumen vom simplex nehmen.
Der algorithmus funktioniert soweit, nur dauert es für ein 8-eck fast eine halbe sekunde den schwerpunkt zu berechnen.
Habt ihr eine idee wie ich die performance verbessern kann?
Edit: Oder gibt es eine Möglichkeit zu überprüfen wo das programm am längsten hängt/wofür es am längsten braucht? Ein Debugger tuts da ja nicht so richtig oder?
Ich programmier mir gerade eine n-Dimensionale virtuelle Realität.
Hier berechne ich zum Beispiel den Schwerpunkt von Polytopen (n-Dimensionale polygone).
Hierzu teile ich das Polytop in Simplexe auf. und berechne dann von jedem simplex den Schwerpunkt
C = \frac{1}{n+1}\sum_{i=0}^n v_i.
Dann berechne ich auch das Volumen von den Simplexen mit mit der Formel 1/n! * det(m) wobei m die punkte sind und n die anzahl der dimensionen ist.
Die schwerpunkte bekommt man ja mit
Cx = 1/(summe_der_gewichte) * (gewicht1*schwerpunkt1[x] + gewicht2*schwerpunkt2[x] [...] )
Cy = 1/(summe_der_gewichte) * (gewicht1*schwerpunkt1[y] + gewicht2*schwerpunkt2[y] [...] )
Weil das Polytop überall die gleiche dichte hat kann ich anstatt des gewichtes auch das volumen vom simplex nehmen.
Der algorithmus funktioniert soweit, nur dauert es für ein 8-eck fast eine halbe sekunde den schwerpunkt zu berechnen.
Habt ihr eine idee wie ich die performance verbessern kann?
Edit: Oder gibt es eine Möglichkeit zu überprüfen wo das programm am längsten hängt/wofür es am längsten braucht? Ein Debugger tuts da ja nicht so richtig oder?