Modifier: a changé la réponse en fonction des nouvelles images et des clarifications.
for every control point p(k, n)
p'(k, n) = ( p(k, n) - p(k) ) * d * l(k) + p(k, n)
où k
est l'index de ligne et n
l'index de colonne du point de contrôle. l
est le facteur d'élévation et est égal à {-1, -1/3, 1/3, 1}. p(k)
est le centre de la kème rangée.
Raisonnement:
À partir des nouvelles images, des lignes rouges et bleues sont tracées du centre de la ligne (p (k) qui est essentiellement (k, 0)) jusqu'à ce point. Sur la première ligne, tous les points de contrôle, y compris ceux du graphique (lignes rouges) sont déplacés vers le même point sur cette ligne. p (k, n) - p (k) donne le vecteur qui déplace un point de p (k) à p (k, n) qui devrait maintenant être appliqué dans l'autre sens, en déplaçant le point à l'emplacement souhaité. Sur vos graphiques, d = 1 pour que tous les premiers points de ligne soient déplacés vers le centre. Vous pouvez facilement résoudre l'équation pour le vérifier. d * l(0)
est -1, ce serait donc -p(k, n) + p(k) + p(k, n)
ce qui donnerait p (k).
Sur la deuxième ligne, votre ligne bleue est à nouveau du point au centre, mais cette fois elle s'est arrêtée avant de l'atteindre. Je ne peux pas dire si elle est vraiment coupée de 1/3 mais ce serait un bon point de départ. La même formule s'applique donc toujours. l est -1/3 d est 1, donc le point serait déplacé sur 1/3 du chemin. 3e est le même que le second mais il se déplace maintenant vers l'extérieur, donc l est 1/3.
Sur la ligne finale, tous les points de contrôle sont déplacés du point central de cette ligne. C'est assez clair puisque vos lignes se rencontrent à ce centre.
Le seul problème que cette formule peut avoir est l'hypothèse de 1/3, à part que je ne vois pas la raison pour laquelle elle devrait échouer.
Remarque: J'ai utilisé ligne, colonne lors de l'indexation, donc si vous utilisez x, y, vous devez changer leur emplacement.