Nieustrukturyzowane siatki mają swoje miejsce.
Możesz przyjrzeć się modelowi Earth System Modeling Framework (ESMF). Mają trochę kodu do zmiany siatki - specjalnie do tego celu - i zrobili kilka fajnych rzeczy z równoległym kodem. Cały system jest zaprojektowany do łączenia modeli, więc mogą tam być również inne przydatne rzeczy.
Inne uwagi:
„nie da się tego zrobić skutecznie dla żadnej znaczącej liczby punktów”
cóż, wydajność jest względna - gdy już masz siatkę w strukturze drzewa, możesz ją przeszukiwać w O (logn), który może być dość cholernie szybki, choć nie w O (1), jak przeszukiwanie zwykłej siatki jest.
Wygląda na to, że interpolacja musi być wykonywana na każdym kroku, jeśli siatki nie dostosowują się, mapowanie z jednej siatki na drugą pozostaje stałe. Możesz więc obliczyć to odwzorowanie (tj. Który element w każdej siatce odpowiada, który element w drugim) w dowolny dogodny sposób, zapisz go, a potem nigdy nie będziesz musiał obliczać go ponownie (dopóki siatki się nie zmienią).
To pozostawia kod interpolacyjny - w którym chcesz zrównoważyć dokładność z wydajnością - prosta interpolacja liniowa w trójkącie jest szybka i może być wystarczająca.
„Myślałem o użyciu drzewa kd do wyszukiwania najbliższego węzła danego punktu, a następnie użyłbym funkcji kształtu tego elementu”
pamiętaj, że najbliższy węzeł nie daje ci elementu - więc będziesz musiał zrobić coś więcej, aby znaleźć pożądany element. Jedną z opcji byłoby użycie zamiast tego rtree, który przechowuje / wyszukuje, ograniczając ramkę - przy każdym wyszukiwaniu otrzymasz więcej niż jeden element, ale możesz następnie sprawdzić, który z nich jest poprawny bezpośrednio.