Trực quan hóa thuật toán Lane-Riesenfeld


7

Ok, tôi tiếp tục đọc các bài báo về điều này và không ai trong số họ có hình ảnh. Thuật toán lane Riesenfeld cung cấp một cách để chia nhỏ tập hợp các điểm với chuyển đổi B-spline.

Các quesiton là đơn giản như thế nào? Nếu bạn có thể đưa cho tôi một bộ ảnh với lời giải thích thì đó là lời giải thích tốt nhất, hơn cả toán học.

Bước đầu tiên (nghĩa là sao chép các đỉnh ban đầu) có vẻ đủ rõ ràng, nhưng tôi không hiểu đầy đủ về cách tính trung bình của điểm giữa.

Hiện tại sự hiểu biết rất, rất kém của tôi đang tạo ra điều này:

Bắt đầu với 4 điểm sau

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

Chúng tôi nhân đôi từng điểm (biểu thị bằng vùng màu xám)

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

Chúng tôi lấy tất cả các điểm lẻ trong bộ mới của mình và di chuyển chúng đến giữa dòng nối 2 điểm liên tiếp:

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

Tôi làm gì bây giờ? Từ đây trở đi tôi hoàn toàn lạc lối

Câu trả lời:


15

Thuật toán Lane-Riesenfeld phân chia đa giác điều khiển của B-spline để tạo ra một đa giác điều khiển mới có cùng giới hạn spline. Nó được tạo thành từ hai bước: đầu tiên, sao chép tất cả các điểm kiểm soátPi vào P2iP2i+1; sau đó, di chuyển từng điểm đến điểm giữa giữa nó và điểm tiếp theo, vì vậyPi12Pi+12Pi+1. Các bước này được minh họa trong hình:

Một bước trùng lặp và một bước di chuyển

Bên trái là một đa giác điều khiển ban đầu. Ở giữa, tôi đã nhân đôi các đỉnh. Ở bên phải, các đỉnh đã di chuyển được một nửa đến đỉnh tiếp theo. Lưu ý rằng chỉ một nửa số đỉnh di chuyển trong bước di chuyển đầu tiên: điều này là doP2i=P2i+1, nhưng P2i+1P2i+2. Tám đỉnh này là một đa giác điều khiển tinh chỉnh cho B-spline tuyến tính được xác định bởi bốn đỉnh ban đầu.

Bây giờ, chúng ta có thể thực hiện bước chuyển động thứ hai (không có sự trùng lặp khác):

Bước chuyển động thứ hai và đa giác mới

Ở bên trái, chúng tôi đã di chuyển từng đỉnh đến điểm giữa giữa nó và hàng xóm của nó; lưu ý rằng tất cả các đỉnh di chuyển lần này (vì không có đỉnh nào ở cùng một vị trí). Ở bên phải, chúng tôi đã vẽ đa giác với tám đỉnh này. Đây là một đa giác điều khiển tinh chỉnh cho B-spline bậc hai được xác định bởi bốn đỉnh ban đầu. Bạn cũng có thể nhận ra đây là cùng một đa giác mà bạn có được bằng cách cắt góc Chaikin, điều này cũng giúp bạn có được B-spline bậc hai.

Bây giờ chúng ta có thể thực hiện các bước di chuyển trùng lặp nhiều hơn để tinh chỉnh thêm đa giác, và do đó gần đúng hơn với đường cong B-spline bậc hai:

Các sàng lọc tiếp theo của đa giác điều khiển B-spline bậc hai

Đây là một hình ảnh động của quá trình này:

Hoạt ảnh của thuật toán LR tạo B-spline bậc hai

Thay vào đó, nếu thay vào đó, chúng ta thực hiện bước chuyển động thứ ba mà không có bước trùng lặp (nghĩa là một lần nhân đôi theo sau ba chuyển động liên tiếp), chúng ta sẽ có một đa giác điều khiển tinh chỉnh cho khối B-spline được xác định bởi bốn đỉnh ban đầu:

Tinh chỉnh khối B-spline bằng các bước dup-move-move-move

Một hình ảnh động của quá trình này:

Hoạt ảnh của thuật toán LR tạo khối B-spline

Nói chung, làm k các bước di chuyển sau mỗi lần lặp lại cho chúng ta đa giác tinh chỉnh cho Ck B-spline.

EDIT : Thêm hình ảnh động.


Mặc dù đây là một câu trả lời rõ ràng tôi thực sự muốn xem quá trình hoạt hình. Nhưng này, chúng tôi là những lập trình viên đồ họa không quá khó. Tôi sẽ cố gắng vào ngày mai.
joojaa

1
Ngoài ra, phần mềm nào bạn đã sử dụng để vẽ / tạo phần mềm này?
Makogan

@Makogan bạn có thể muốn xem bài đăng này để biết ý tưởng về cách vẽ. Mặc dù sự lựa chọn là một cá nhân rất cao.
joojaa

1
@Makogan Tôi đã tạo các sơ đồ trong tiệm cận , đó là nguồn mở.
gilgamec

1
@joojaa Tôi đã thêm hình ảnh động của thế hệ B-spline bậc hai và khối.
gilgamec
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.