datenstruktur für interpolation in 3D
-
hi leute,
ich habe ein kleines problem.
ein punkt im raum wird bei mir durch 4 double werte charakterisiert.
einmal die länge eines vektors, der kippwinkel der ebene in der der vektor liegt von der x-achse aus gesehen, dann die kippung des vektors innerhalb der ebene und der wert des punkts.
also innerhalb der ebene polarkoordinaten und zusätzlich der kippwinkel der ebene.das sind jetzt 4 double werte.
mein problem ist, dass ich zwischen diesen werten nun interpolieren will, da diese nicht an den gewünschten stellen im raum liegen.
ich lege gewisse flächen in den raum, an denen ich die werte der punkte errechnen will.kann mir jemand einen tipp für eine geeignete datenstruktur geben, mit der ich die interpolation dann relativ einfach und performant machen kann?
interpolieren will ich auf verschiedene art und weise, nämlich zb. nearest neighbor, linear und evt. auch mit splines.angedacht habe ich mal eine variante mit einem struct array, das ich dann über std::sort sortieren lasse.
bin aber für gute lösungen auf jeden fall offen
jperl
-
Für Interpolationen benötigst du random access (ich weiß nicht, warum du dazu sortieren willst). Da bietet sich std::vector(double[4]) an.
-
ich dachte daran mir die daten in unterräume zu teilen und darin zu sortieren um die suche nach dem nächsten nachbarn usw. zu beschleunigen. die werte sind nicht zufällig, sondern eben nur neben meinem raster angeordnet.
das problem ist, dass das 256^3 werte im raum sind und ich nicht für jeden punkt meines rasters die distanz zu jedem der 256^3 ausrechnen will/kann.
jperl
-
Naja aber um ein Raster wirst du dabei wohl nicht herum kommen. Sonst macht die Interpolation irgendwie wenig Sinn, denk ich mir...
-
Dann eben eine Map, wenn's sortiert sein soll. Aber viel Spaß dabei, dir einen Vergleichsoperator auszudenken, der Punkte im Raum sinnvoll sortiert, so dass die Nähe von Punkten zueinander erhalten bleibt.
-
SeppJ schrieb:
Dann eben eine Map, wenn's sortiert sein soll. Aber viel Spaß dabei, dir einen Vergleichsoperator auszudenken, der Punkte im Raum sinnvoll sortiert, so dass die Nähe von Punkten zueinander erhalten bleibt.
stimmt auch wieder.
ich werde mir die daten wohl in unterräume aufteilen und dort dann mit allen werten vergleichen.danke vorerst mal.
jperl
-
Mir ist allerdings noch nich ganz klar, warum er sortieren will... Interpolation in Zusammenhang mit Sortierung sagt mir irgendwie nichts.
-
It0101 schrieb:
Mir ist allerdings noch nich ganz klar, warum er sortieren will... Interpolation in Zusammenhang mit Sortierung sagt mir irgendwie nichts.
ich bin mir mittlerweile auch nicht mehr sicher ob mir die sortierung überhaupt was bringen würde.

jperl
-
jperl schrieb:
It0101 schrieb:
Mir ist allerdings noch nich ganz klar, warum er sortieren will... Interpolation in Zusammenhang mit Sortierung sagt mir irgendwie nichts.
ich bin mir mittlerweile auch nicht mehr sicher ob mir die sortierung überhaupt was bringen würde.

jperl
endlich. Dann sind wir wieder bei der ersten Antwort, die du bekommen hast. Du musst für die Interpolation schnell auf beliebige Elemente zugreifen können -> vector.