Bearbeiten: Die Antwort wurde entsprechend den neuen Bildern und der Klarstellung geändert.
for every control point p(k, n)
p'(k, n) = ( p(k, n) - p(k) ) * d * l(k) + p(k, n)
Dabei k
ist der Zeilenindex und n
der Spaltenindex des Kontrollpunkts. l
ist der Höhenfaktor und ist gleich {-1, -1/3, 1/3, 1}. p(k)
ist das Zentrum der k'ten Reihe.
Begründung:
Von den neuen Bildern werden rote und blaue Linien von der Mitte der Linie (p (k), die im Grunde genommen (k, 0) ist) bis zu diesem Punkt gezeichnet. In der ersten Zeile werden alle Kontrollpunkte, einschließlich der im Diagramm (rote Linien), an denselben Punkt auf dieser Linie verschoben. p (k, n) - p (k) gibt den Vektor an, der einen Punkt von p (k) nach p (k, n) bewegt, der nun auf die andere Weise angewendet werden sollte, wobei der Punkt an den gewünschten Ort verschoben wird. In Ihren Diagrammen ist d = 1, sodass alle Punkte der ersten Linie in die Mitte verschoben werden. Sie können die Gleichung leicht lösen, um dies zu überprüfen. d * l(0)
ist -1, also wäre es -p(k, n) + p(k) + p(k, n)
das, was p (k) ergeben würde.
In der zweiten Linie ist Ihre blaue Linie wieder vom Punkt zur Mitte, aber diesmal hat sie angehalten, bevor sie sie erreicht hat. Ich kann nicht sagen, ob es wirklich von 1/3 geschnitten ist, aber das wäre ein guter Ausgangspunkt. Es gilt also immer noch die gleiche Formel. l ist -1/3 d ist 1, also würde der Punkt um 1/3 des Weges verschoben. Das dritte ist das gleiche wie das zweite, aber es bewegt sich jetzt nach außen, also ist l 1/3.
In der letzten Linie werden alle Kontrollpunkte vom Mittelpunkt dieser Linie entfernt. Dies ist ziemlich klar, da sich Ihre Linien in dieser Mitte treffen.
Das einzige Problem, das diese Formel haben kann, ist die Annahme von 1/3, ansonsten sehe ich keinen Grund, warum sie fehlschlagen sollte.
Hinweis: Ich habe beim Indizieren Zeile und Spalte verwendet. Wenn Sie also x, y verwenden, sollten Sie deren Position wechseln.