Modifica: ha cambiato la risposta in base a nuove immagini e chiarimenti.
for every control point p(k, n)
p'(k, n) = ( p(k, n) - p(k) ) * d * l(k) + p(k, n)
dove k
è l'indice di riga ed n
è l'indice di colonna del punto di controllo. l
è il fattore di elevazione ed è uguale a {-1, -1/3, 1/3, 1}. p(k)
è il centro della k'th fila.
Fondamento logico:
Dalle nuove immagini, le linee rosse e blu sono disegnate dal centro della linea (p (k) che è sostanzialmente (k, 0)) a quel punto. Sulla prima riga, tutti i punti di controllo, compresi quelli sul grafico (linee rosse) vengono spostati nello stesso punto su quella linea. p (k, n) - p (k) fornisce il vettore che sposta un punto da p (k) a p (k, n) che ora dovrebbe essere applicato nell'altro modo, spostando il punto nella posizione desiderata. Sui tuoi grafici, d = 1 in modo che tutti i punti della prima linea vengano spostati al centro. Puoi facilmente risolvere l'equazione per verificarlo. d * l(0)
è -1, quindi sarebbe -p(k, n) + p(k) + p(k, n)
quale darebbe p (k).
Sulla seconda linea, la linea blu è di nuovo da un punto al centro, ma questa volta si è fermata prima di raggiungerla. Non so dire se sia davvero tagliato da 1/3 ma sarebbe un buon punto di partenza. Quindi si applica ancora la stessa formula. 1 è -1/3 d è 1, quindi il punto verrebbe spostato di 1/3 del modo. Il terzo è uguale al secondo ma ora si sposta verso l'esterno, quindi 1 è 1/3.
Nell'ultima riga, tutti i punti di controllo vengono spostati dal punto centrale di quella linea. Questo è abbastanza chiaro poiché le tue linee si incontrano in quel centro.
L'unico problema che questa formula può avere è l'assunzione di 1/3, a parte questo non vedo il motivo per cui dovrebbe fallire.
Nota: ho usato riga, colonna durante l'indicizzazione, quindi se stai usando x, y dovresti cambiare la loro posizione.