Voici un exemple explicite basé sur les fonctions de forme.
Considérons les fonctions:
u1 (x, z) = (x-X_B)/(x_c-X_B)
On a u1 (X_B, z_b) = u1 (x_a, Z_A) = 0 (parce que x_a = X_B) et u1 (x_c, z_c) = u1 (x_d, z_d) = 1
u2 (x, z) = 1 - u1 (x, z)
maintenant, nous avons u2 (x_b, z_b) = u2 (x_a, z_a) = 1 et u2 (x_c, z_c) = u2 (x_d, z_d) = 0
v1 (x, z) = (z-z_b)/(z_a- z_b)
Cette fonction répond v1 (x_a, Z_A) = v1 (x_d, z_d) = 1 et v1 (X_B, z_b) = v1 (x_c, z_c) = 0
v2 (x, z) = 1 - v1 (x, z)
Nous avons v2 (x_a, Z_A) = v2 (x_d, z_d) = 0 et v2 (X_B, z_b) = v2 (x_c, z_c) = 1
maintenant nous allons construire de nouvelles fonctions comme suit:
S_D (x, z) = u1 (x, z) * v1 (x, z)
Nous obtenons S_D (x_ d, z_d) = 1 et S_D (x_a, z_a) = S_D (x_b, z_b) = 0
S_C (x, z) = u1 (x, z) * v2 (x , z)
Nous obtenons S_C (x_c, z_c) = 1 et S_C (x_a, Z_A) = S_C (X_B, z_b) = S_C (x_d, z_d) = 0
S_A (x, z) = u2 (x, z) * v1 (x, z)
Nous obtenons S_A (x_a, z_a) = 1 et S_A (x_b, z_b) = S_A (x_c, z_c) = S_A (x_d, z_d) = 0
S_B (x, z) = u2 (x, z) * v2 (x, z)
Nous obtenons S_B (X_B, z_b) = 1 et S_B (x_a, Z_A) = S_B (x_c, z_c) = S_B (x_d, z_d) = 0
définissent maintenant votre fonction interpoler comme
H (x, z) = h_a * S_A (x, z) + h_b * S_B (x, z) + h_c * S_C (x, z) + h_d * S_D (x, z),
où h_a est le haut au point A, h_b est la hauteur au point B, et ainsi de suite.
Vous pouvez facilement vérifier que H est en effet une fonction interpoler:
H (x_a, Z_A) = h_a, H (X_B, z_b) = h_b, H (x_c, z_c) = h_c et H (x_d , z_d) = h_d.
Maintenant, pour se rapprocher de la hauteur au P, tout ce que vous devez faire est d'évaluer H à ce stade:
h_p = H (x_p, z_p)
Les fonctions S sont normalement visés comme "fonctions de forme". Il y a une telle fonction pour chaque nœud dont vous voulez que votre valeur interpolée dépende, et dans ce cas ils satisfont tous la propriété delta de Kronecker (ils prennent la valeur un à un nœud et zéro à tous les autres nœuds).
Il existe plusieurs façons de créer des fonctions de forme pour un ensemble de nœuds donné. Si je me souviens bien, la construction de fonctions de formes 2D par multiplication de fonctions de forme 1D (comme nous l'avons fait dans ce cas) est appelée "produit tensoriel de fonctions" (facile dans ce cas car la grille est rectangulaire). Nous nous sommes retrouvés avec quatre fonctions (une par nœud), toutes des combinaisons linéaires de {1, x, z, xz}. Si vous ne voulez utiliser que trois points pour votre interpolation, vous devriez pouvoir créer facilement trois fonctions de forme comme des combinaisons linéaires de {1, x, z} seulement, mais vous perdrez 25% de la hauteur Les informations fournies par la grille et votre interpolant ne seront pas lisses dans le rectangle lorsque h_b! = h_d.
Est-ce un test de coordonnées barycentrique? – tzenes
Voulez-vous obtenir la valeur de hauteur au point P si ABC et ADC sont des triangles séparés ou voulez-vous que la hauteur réelle interpole le quad ABCD? Les deux opérations ne donnent pas le même résultat. – Coincoin
Ce que j'essaie de faire, c'est d'abord déterminer le triangle P, puis interpoler la hauteur par rapport aux points ABC ou ADC. – fastrack20