Wenden Sie eine Verzerrung auf die Bézier-Oberfläche an


8

Ich versuche, den Bildverzerrungseffekt zu simulieren, der in Adobe Photoshop verwendet wird.

Das rechteckige Bild wird entsprechend einer kubischen Bézier-Oberfläche verzogen (in 2D sind alle Z-Komponenten 0). Bei jeder Bézier-Oberfläche kann eine vertikale Verzerrung darauf angewendet werden.d[0,1]]

Links : Eingangsfläche, , Rechts : Ausgangsfläche, d = 0,8d=0d=0,8

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Haben Sie eine Idee, was mit der Bézier-Oberfläche (16 Punkte) gemacht wird, wenn Sie von der Version links in die Ausgabe rechts konvertieren?

Antworten:


5

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 kist der Zeilenindex und nder Spaltenindex des Kontrollpunkts. list 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.


Es werden vertikale Linien beibehalten, das ist wahr. Aber ich arbeite mit der Bézier-Oberfläche (16 Punkte in einer Ebene) und ich glaube, dass dies nur durch Verschieben dieser 16 Punkte möglich ist, ohne Punkte auf Bézier-Kurven usw. zu berechnen. Hier können Sie sehen, wie die Bézier-Oberfläche funktioniert: philipandrews.org/ Sandbox / BezierSurface / bin / BezierSurface.swf
Ivan Kuckir

Ich denke, ich habe eine Lösung für dieses Problem gefunden, wenn ich verstanden habe, dass es richtig ist. Sie fragen sich, wie die Bezierfläche A zur Bezierfläche B oder C zu D verformt werden soll, wobei der Parameter d 0,8 beträgt. Ist das richtig?
Cem Kalyoncu

Nun, es scheint, dass dies nicht die genaue Formel ist, aber ziemlich nahe. Ich werde noch etwas darüber nachdenken. Die Formel ist zumindest für Punkte auf der Kurve korrekt.
Cem Kalyoncu

Sie kommen näher :) Aber für das zweite Beispiel ändert sich auch die Y-Koordinate. Wie bereits erwähnt, bewegen sich alle Punkte entlang der Linien. Es reicht also aus, für jeden Punkt die neue Position für d = 1 zu finden, und dann kann ich linear interpolieren.
Ivan Kuckir

Ich habe ein weiteres Bild hinzugefügt, es kann Ihnen helfen.
Ivan Kuckir
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.