Khái niệm cơ bản về B-spline (NURBS) không đồng nhất


9

Tôi đang cố gắng để hiểu các đường cong NURBS (bề mặt sau!) Nhưng tôi gặp một số khó khăn trong việc hiểu những điều cơ bản của hoạt động bên trong của nó. Ai đó có thể vui lòng giải thích một vài điều cho tôi? Khi tôi đến từ các đường cong Bezier, một so sánh giữa hai điều này sẽ đặc biệt hữu ích.

  1. Các "chức năng cơ sở hợp lý" trông hơi nhỏ xíu như Bernstein đa thức của (hợp lý) đường cong Bezier. Có tham số ucũng đi từ 0 đến 1?

  2. Làm thế nào để "thêm chi tiết" vào một đường cong? Ý tôi là, với Beziers nếu tôi cần mô tả một hình dạng phức tạp hơn, tôi chỉ đơn giản là "khâu" một số Beziers lại với nhau. Hoặc ít thường xuyên hơn, tăng mức độ. Tôi hiểu rằng tôi cũng có thể tăng mức độ của NURBS và đặt một số đường cong NURBS cạnh nhau, nhưng đây có phải là cách thực hiện không?

  3. Bài viết Wikipedia, ít nhất là với tôi, dường như không rõ lắm về "vectơ nút thắt" này. Nó là cái gì vậy?


Đây là một chút quá nhiều thứ cho một câu hỏi. Về cơ bản tôi có thể đun sôi bài giảng giới thiệu của mình về chủ đề này trong một vài giờ. Bit đi sâu vào chi tiết sử dụng De casteljanu và thuật toán của de boor sẽ khiến tôi mất quá nhiều thời gian.
joojaa

1
Vì vậy, tôi muốn xem các câu hỏi 3, 5 và có thể 6 tách ra thành các câu hỏi riêng biệt để làm cho việc trả lời và hiểu thêm về bữa ăn.
joojaa

@joojaa Chắc chắn, tôi có thể chia câu hỏi, chỉ một giây thôi ...
Ecir Hana

1
Vì vậy, câu hỏi 3 , 56 được tách ra thành các câu hỏi riêng biệt.
Ecir Hana

Câu trả lời:


7

B-Splines và Beziers là những phát minh song song ít nhiều giống nhau. Nơi Beziers cố gắng bắt đầu từ ý tưởng phù hợp với tiếp tuyến. B-Splines bắt đầu với ý tưởng về các chức năng cơ bản. NURB Splines (hoặc phần hợp lý trong thực tế) chỉ là những khái quát của B-Splines để bạn có thể mô tả các phần hình nón chính xác *, vì chúng đặc biệt quan tâm đến kỹ thuật.

Trước tiên chúng ta hãy bắt đầu với một thuật ngữ Spline NURB đơn giản. Lý do của những đường cong này là một chút khác biệt so với Beziers. Đầu tiên là khái niệm về một nhịp. Một nhịp sẽ tương đương với toàn bộ spline Bezier ngoại trừ trong các lần nâng cấp, bạn có thể có bất kỳ số nhịp nào.

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

Hình 1 : Một nhịp NURBS khối. Đây là một chút không điển hình trong công thức

Mỗi nhịp được hình thành bởi độ cong + 1 điểm kiểm soát **. Mỗi đường cong có thể bao gồm bất kỳ số điểm. Mỗi nhịp liên tiếp sử dụng lại các điểm hình thành nhịp trước đó bằng cách bỏ một điểm và lấy thêm một điểm trong danh sách. Vì vậy, tạo các đường cong phức tạp hơn cũng dễ như chỉ cần thêm nhiều điểm vào đường cong.

LƯU Ý : Các đường cong hình ảnh có một chút tham số không điển hình, không giải thích điều này có nghĩa là gì trong phần tiếp theo. Khi tôi lấy khái niệm nút thắt lên. Đây chỉ là một cách dễ dàng hơn để giải thích làm thế nào các đường cong keo dính với nhau.

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

Hình 2 : 2 khối kéo dài nhau, mỗi nhịp sử dụng 4 điểm. cùng nhau chúng tạo thành một đường cong. Họ chia sẻ hầu hết các điểm với nhau.

Đến bây giờ có lẽ chúng tôi đã trả lời 2 câu hỏi về việc thêm độ phức tạp. Nhưng tôi muốn thêm rằng sơ đồ này đảm bảo tính liên tục tốt hơn so với đường cong bezier. Ngoài ra, bạn có thể tạo mảng điểm tạo thành chu kỳ thân tàu. Tạo thành một đường cong kín.

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

Hình 3 : Một bề mặt NURBS hình khối kín có nhiều nhịp như nó có điểm. Mỗi màu là một nhịp.

Tham số hóa

Cho đến thời điểm này, người ta chỉ có thể nói rằng việc xâu chuỗi các nhịp lại với nhau là một mẹo giống như "khâu" các đường cong Bezier. Nhưng có một sự khác biệt. Các đường cong được tham số hóa dọc theo chiều dài của nó. Vì vậy, các đường cong không tách rời nhau, chúng không nội suy dạng 0 đến 1 trên mỗi nhịp như Beziers làm. Thay vào đó, đường cong bên dưới có một phạm vi tham số cusomizable. Tham số được lưu trữ trong một cái gì đó gọi là nút thắt và mỗi nút có thể có giá trị tăng tùy ý trong chuỗi. Vì vậy, bạn có thể tham số toàn bộ các đường cong u trong phạm vi 0 - 1 hoặc 0 đến 12. Các tham số cũng không nhất thiết phải đồng nhất.

Thông số này thay đổi cách đường cong được định hình. Tại sao điều này sẽ hữu ích? Vâng, bạn có thể điều chỉnh độ căng dọc theo đường cong cho một. Hoặc bạn có thể mã hóa độ dài của đường cong thành tham số U. Một cách sử dụng đặc biệt là làm cho đường cong NURBS hoạt động giống như đường cong Bezier hoàn toàn hoặc chỉ một phần (ví dụ như ở phần cuối chứ không phải ở giữa).

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

Hình 4 : Điểm giống nhau trình tự nút khác nhau. Đường cong NURBS màu xanh lá cây tương ứng với đường cong Bezier có phạm vi tham số 0-2 thay vì 0-1

Ok vậy các nút thắt là gì? Chúng chỉ đơn giản là phạm vi của các chức năng cơ bản. Vì khối b-spline có 4 điểm có 4 hàm nội suy nên nó cần 8 hải lý. Chỉ các khu vực có 3 hàm chồng lấp và tổng hợp lên tới 1.0 mới có thể vẽ một đường.

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

Hình ảnh 5 : 2 chức năng cơ bản khác nhau, giống như và một tham số phân đoạn thống nhất, trải rộng đến phạm vi 0-1.

Và bây giờ chúng tôi chủ yếu mô tả câu trả lời cho câu hỏi 1. Phạm vi không được xác định, bạn có thể kéo dài các hàm cơ bản khi bạn thấy phù hợp. Và cuối cùng, vectơ nút chỉ đơn giản tạo ra các phạm vi tham số cho các hàm cơ sở. Vẫn còn một điều nữa chi phối hình dạng của đường cong và đó là vectơ trọng lượng. Nhưng đó là một câu chuyện khác được kể ở nơi khác.


* Hợp lý này trong trường hợp này có nghĩa là đường cong NURBS không phải là đa thức, vì bạn không thể mô tả một vòng tròn với đa thức.

** Người ta có thể định nghĩa các loại điểm khác.


liên quan đến (*), các đường cong Bezier có cùng một vấn đề. Vấn đề ở đây là các đường cong (trong cả hai trường hợp) được định nghĩa là x = f (t), y = f (t). Tuy nhiên, bạn cũng có thể xác định đường cong đơn biến / tường minh / 1 chiều (một lần nữa, trong cả hai trường hợp) là y = f (x), sử dụng x thay cho t. Trong trường hợp các đường cong hợp lý, thay vì có thể biểu diễn các phần hình nón, bạn có thể biểu diễn sin và cos (và tất nhiên hơn). NURBS / b-splines không đặc biệt về vấn đề đó.
Alan Wolfe

Tôi nghĩ rằng tuyên bố về độ dài của bạn là sai (chỉ hoạt động với các hàm tuyến tính?) Và không chắc cách tính toán độ dài được cho là phù hợp với lời giải thích của bạn (thông tin tốt mà bạn đã đưa ra, chỉ cần nói!)
Alan Wolfe

@AlanWolfe đã xóa bằng mọi cách
joojaa

Tuyệt vời nhất! Cảm ơn rất nhiều, giải thích rất tốt!
Ecir Hana

Typo có lẽ? "Thay vào đó, bề mặt bên dưới có phạm vi tham số tùy chỉnh. Tham số được lưu trữ trong một thứ gọi là nút và mỗi nút có thể có giá trị tùy ý lớn hơn giá trị tiếp theo." -> "Thay vào đó, đường cong bên dưới có phạm vi tham số tùy chỉnh. Tham số được lưu trữ trong một cái gì đó gọi là nút thắt và mỗi nút có thể có giá trị tùy ý lớn hơn trước đó ." Btw., Bạn có thể vui lòng làm rõ ý của bạn về "phạm vi UV" không? "UV" ngụ ý 2D ..?
Ecir Hana
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.