Áp dụng biến dạng cho bề mặt Bézier


8

Tôi đang cố gắng mô phỏng hiệu ứng cong vênh hình ảnh, được sử dụng trong Adobe Photoshop.

Hình ảnh hình chữ nhật bị vênh theo bề mặt Bézier hình khối (ở dạng 2D, tất cả các thành phần Z đều bằng 0). Có bất kỳ bề mặt Bézier nào, biến dạng dọc có thể được áp dụng cho nó.d[0,1]

Trái : bề mặt đầu vào bézier, , Phải : bề mặt đầu ra, d=0d=0.8

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Bạn có biết gì không, những gì được thực hiện cho bề mặt Bézier (16 điểm), khi chuyển đổi từ phiên bản bên trái sang đầu ra bên phải?

Câu trả lời:


5

Chỉnh sửa: thay đổi câu trả lời theo hình ảnh mới và làm rõ.

for every control point p(k, n)
   p'(k, n) = ( p(k, n) - p(k) ) * d * l(k) + p(k, n)

trong đó kchỉ số hàng và nlà chỉ số cột của điểm kiểm soát. llà hệ số độ cao và bằng {-1, -1/3, 1/3, 1}. p(k)là trung tâm của hàng thứ k'th.

Cơ sở lý luận:

Từ những hình ảnh mới, các đường màu đỏ và màu xanh được vẽ từ tâm của đường (p (k) về cơ bản là (k, 0)) đến điểm đó. Trên dòng đầu tiên, tất cả các điểm kiểm soát, bao gồm cả các điểm trên biểu đồ (đường màu đỏ) được di chuyển đến cùng một điểm trên dòng đó. p (k, n) - p (k) cho vectơ di chuyển một điểm từ p (k) sang p (k, n) mà bây giờ nên được áp dụng cho cách khác, di chuyển điểm đến vị trí mong muốn. Trên biểu đồ của bạn, d = 1 để tất cả các điểm dòng đầu tiên sẽ được di chuyển đến trung tâm. Bạn có thể dễ dàng giải phương trình để xác minh điều này. d * l(0)là -1, vì vậy nó -p(k, n) + p(k) + p(k, n)sẽ cung cấp cho p (k).

Trên dòng thứ hai, dòng màu xanh của bạn một lần nữa từ điểm đến trung tâm, nhưng lần này nó dừng lại trước khi tiếp cận nó. Tôi không thể biết nếu nó thực sự được cắt từ 1/3 nhưng đó sẽ là một điểm khởi đầu tốt. Vì vậy, công thức tương tự vẫn được áp dụng. l là -1/3 d là 1, vì vậy điểm sẽ được di chuyển theo 1/3 trên đường đi. Thứ 3 giống như thứ hai nhưng bây giờ nó di chuyển ra ngoài, do đó l là 1/3.

Trên dòng cuối cùng, tất cả các điểm kiểm soát được chuyển ra từ điểm trung tâm của dòng đó. Điều này khá rõ ràng vì các dòng của bạn gặp nhau tại trung tâm đó.

Vấn đề duy nhất mà công thức này có thể có là giả định là 1/3, ngoài ra tôi không thấy lý do tại sao nó phải thất bại.

Lưu ý: Tôi đã sử dụng hàng, cột trong khi lập chỉ mục, do đó, nếu bạn đang sử dụng x, y bạn nên chuyển đổi vị trí của chúng.


Nó bảo vệ các đường thẳng đứng, đó là sự thật. Nhưng tôi đang làm việc với bề mặt Bézier (16 điểm trên một mặt phẳng) và tôi tin rằng nó phải được thực hiện chỉ bằng cách di chuyển 16 điểm này, mà không cần tính toán điểm trên các đường cong bézier, v.v ... Ở đây bạn có thể thấy, bề mặt Bézier hoạt động như thế nào: philipandrews.org/ hộp cát / BezierSurface / bin / BezierSurface.swf
Ivan Kuckir

Tôi nghĩ rằng tôi đã tìm thấy giải pháp cho vấn đề đó nếu tôi hiểu là chính xác. Bạn đang hỏi làm thế nào để biến dạng bề mặt bezier A thành bề mặt B hoặc C to D hơn với tham số d là 0,8, điều đó có đúng không?
Cem Kalyoncu

Chà có vẻ như đó không phải là công thức chính xác nhưng khá gần gũi. Tôi sẽ suy nghĩ về điều này nhiều hơn một chút. Công thức là chính xác ít nhất cho các điểm trên đường cong.
Cem Kalyoncu

Bạn đang tiến gần hơn :) Nhưng đối với ví dụ thứ hai, tọa độ Y cũng thay đổi. Như tôi đã đề cập, tất cả các điểm di chuyển dọc theo các đường, do đó, đủ để tìm vị trí mới cho d = 1 cho mỗi điểm, sau đó tôi có thể nội suy tuyến tính.
Ivan Kuckir

Tôi đã thêm một hình ảnh khác, nó có thể giúp bạn.
Ivan Kuckir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.