Façon simple d'interpoler entre les points dans l'espace 3D pour former une surface lisse
J'essaie de venir avec un moyen simple et efficace pour créer une surface lisse qui croise un nombre d'échantillon donné de points.
Pour tout X,Y du point sur la surface, je m'identifie jusqu'à 4 points d'échantillonnage dans chacune des 4 directions (le plus et le moins de points sur le X, puis l'axe des axes). Compte tenu de ce point, je veux un moyen pour calculer une valeur de Z qui interpole entre les 4 points d'échantillonnage.
De cours de l'algorithme, compte tenu de la position X, Y de l'un des 4 points d'échantillonnage, doit la sortie de la valeur de Z pour ce point. Notez également qu'il peut y avoir moins de 4 points d'échantillonnage.
Je suppose que certains fonction des valeurs Z pour les 4 points d'échantillonnage, d'une certaine manière inversement biaisée par la distance au point de l'échantillon, mais je ne peux pas comprendre comment le faire.
Quelqu'un a des idées sur un moyen simple de faire cela?
source d'informationauteur sanity
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire par la construction de patchs de Catmull-Rom splines. Ces splines va frapper chacun des points de contrôle et ils sont continues dans la dérivée première (mais pas la deuxième). Je trouve aussi extrêmement facile de travailler avec. Le calcul est simple et ils se comportent de manière intuitive avec de légères modifications dans les points de contrôle.
Au plus haut niveau, vous aurez besoin de 16 points par patch (sur le bord de votre jeu de données, vous pouvez utiliser les coins et les bords des points à deux reprises dans la même spline).
Tout d'abord, vous aurez besoin d'interpoler à travers les points de p[i][j] dans chaque ligne dans la matrice de 4x4, pour créer un ensemble de quatre points de contrôle intermédiaires q[i]. Voici un brut ASCII esquisse de ce que je veux dire.
Maintenant, vous pouvez interpoler entre chacun de ces quatre points de contrôle intermédiaires pour trouver un final cannelé point sur votre surface.
Voici une construction de la Catmull-Rom spline à travers quatre points. Dans cet exemple, vous êtes en interpolant entre les points p[i-1] et p[i]à l'aide de points de contrôle de chaque côté p[i-2] et p[i+1]. u est l'interpolation facteur allant de zéro à un. τ est définie comme la tension sur la spline et affecte la façon dont étroitement votre cannelé de surface est conforme à vos points de contrôle.
REMARQUE: il n'est pas immédiatement évident, à mettre dans Stackoverflow de l'interface graphique, mais u2 et u3 sont censés représenter u au carré et u cubes derespectivement.
Vous pouvez utiliser bilinéaire/interpolation bicubique, mais dans trois directions (trilinéaire/tricubic, respectivement). Il est tout à fait trivial si vous comprenez comment ces formes d'interpolation de travail. Voir Tricubic Interpolation sur Wikipédia pour plus d'informations.
Vous êtes à la recherche d'une surface d'interpolation ou une grille assez?
Pour une surface d'interpolation je vois que d'autres ont suggéré l'utilisation des triangulations (par exemple l'utilisation de ce: http://en.wikipedia.org/wiki/Delaunay_triangulation)
Pour la création d'une grille: un de mes collègues ont utilisé l'équation de la chaleur (http://en.wikipedia.org/wiki/Heat_equation) pour calculer les valeurs de pixels en dehors de la donnée des points d'échantillonnage. Ce produit extrêmement réaliste à la recherche les surfaces de terrain, et il est trivial de paralléliser.
Utilisation de catmull-rom patchs
Si vous voulez une simple interpolation linéaire de ce point, la valeur Z du point central est simplement la moyenne des 4 voisins les valeurs Z, étant donné les distances sont symétriques dans les deux Y et X.
Si les distances ne sont pas symétriques, mais le point central est toujours sur le même X et Y lignes, vous pouvez calculer à la fois Y et X des interpolations et la valeur finale est la moyenne de ceux-ci.
Donc Zc serait: Zc=(Zx1+x*(Zx2-Zx1)/(x2-x1)+Zy1+y*(Zy2-Zy1)/(y2-y1))/2, où x et y sont les distances de x1 et y1.
Un problème lors de l'interpolation en utilisant le schéma proposé dans la question, dans lequel un sous-ensemble des voisins les plus proches sont choisis à partir d'un ensemble dispersé, c'est que le résultat n'a pas besoin d'être continue.
Penser. Supposons que je déplacer le long de certaines lisse, chemin continu par l'intermédiaire de (x,y) d'avion. Tant que les 4 plus proches voisins ne changent pas, l'interpolant sera lisse, défini toutefois vous avez choisi de le faire. Cependant, à un certain point, que le sous-ensemble des voisins les plus proches, soudain changement. À ce stade, vous devez avoir l'interpolant cohérent à travers la frontière. Le mieux est d'utiliser une triangulation de la variable indépendante à définir. Ceci assure un continu (linéaire) interpolant à l'intérieur de l'enveloppe convexe des données. Avec plus de travail, d'ordre supérieur interpolations peuvent également être réalisé avec une triangulation.
Radial fonctions de base sont également couramment également être utilisé pour l'interpolation, ou Krigeage, si vous arrive d'être dans la géostatistique. Depuis que vous avez été à la recherche en fonction de la distance de méthodes, de considérer radiale des fonctions de base. Par exemple, une recherche pour "inverse multiquadric interpolation".