Aplicar distorsión a la superficie de Bézier


8

Estoy tratando de simular el efecto de deformación de la imagen, que se usa en Adobe Photoshop.

La imagen rectangular se deforma de acuerdo con una superficie cúbica de Bézier (en 2D, todos los componentes Z son 0). Tener cualquier superficie Bézier, distorsión vertical d[0,1] se le puede aplicar

Izquierda : superficie de entrada bézier,d=0, Derecha : superficie de salida, d=0.8

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

¿Tiene alguna idea de lo que se hace en la superficie de Bézier (16 puntos) al convertir de la versión de la izquierda a la salida de la derecha?

Respuestas:


5

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 kestá el índice de fila y nes el índice de columna del punto de control. les 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.


Preserva las líneas verticales, eso es cierto. Pero estoy trabajando con la superficie de Bézier (16 puntos en un plano) y creo que debe ser factible simplemente moviendo estos 16 puntos, sin calcular puntos en curvas de Bézier, etc. Aquí puede ver cómo funciona la superficie de Bézier: philipandrews.org/ sandbox / BezierSurface / bin / BezierSurface.swf
Ivan Kuckir

Creo que encontré la solución a ese problema si entendí que es correcto. Se está preguntando cómo deformar la superficie B de Bezier a la superficie B de B o C a D con el parámetro d siendo 0.8, ¿es correcto?
Cem Kalyoncu

Bueno, parece que esa no es la fórmula exacta, pero está bastante cerca. Reflexionaré sobre esto un poco más. La fórmula es correcta al menos para los puntos en la curva.
Cem Kalyoncu

Te estás acercando :) Pero para el segundo ejemplo, la coordenada Y también cambia. Como mencioné, todos los puntos se mueven a lo largo de las líneas, por lo que es suficiente encontrar la nueva posición para d = 1 para cada punto, entonces puedo interpolar linealmente.
Ivan Kuckir

He agregado otra foto, puede ayudarte.
Ivan Kuckir
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.