Editar: cambió la respuesta según nuevas imágenes y aclaraciones.
for every control point p(k, n)
p'(k, n) = ( p(k, n) - p(k) ) * d * l(k) + p(k, n)
donde k
está el índice de fila y n
es el índice de columna del punto de control. l
es el factor de elevación y es igual a {-1, -1/3, 1/3, 1}. p(k)
es el centro de la fila k.
Razón fundamental:
A partir de las nuevas imágenes, se dibujan líneas rojas y azules desde el centro de la línea (p (k), que es básicamente (k, 0)) hasta ese punto. En la primera línea, todos los puntos de control, incluidos los del gráfico (líneas rojas) se mueven al mismo punto en esa línea. p (k, n): p (k) proporciona el vector que mueve un punto de p (k) a p (k, n) que ahora debería aplicarse al otro lado, moviendo el punto a la ubicación deseada. En sus gráficos, d = 1 para que todos los puntos de la primera línea se muevan al centro. Puede resolver fácilmente la ecuación para verificar esto. d * l(0)
es -1, por lo que sería -p(k, n) + p(k) + p(k, n)
lo que daría p (k).
En la segunda línea, su línea azul está nuevamente desde el punto hacia el centro, pero esta vez se detuvo antes de llegar a ella. No puedo decir si realmente está cortado de 1/3, pero ese sería un buen punto de partida. Entonces, la misma fórmula todavía se aplica. l es -1/3 d es 1, por lo que el punto se movería en 1/3 del camino. La tercera es la misma que la segunda pero ahora se mueve hacia afuera, por lo tanto, l es 1/3.
En la línea final, todos los puntos de control se mueven fuera del punto central de esa línea. Esto es bastante claro ya que sus líneas se encuentran en ese centro.
El único problema que puede tener esta fórmula es la suposición de 1/3, aparte de eso, no veo la razón por la que debería fallar.
Nota: Utilicé fila, columna durante la indexación, por lo tanto, si usa x, y, debe cambiar sus ubicaciones.