Tách các đường cong NURBS


8

Việc chia đường cong Bezier thành hai phần tại một số tham số trất dễ dàng nhờ thuật toán De Casteljau .

Có một thuật toán tương tự cho các đường cong NURBS? Làm thế nào để tách một đường cong NURBS?


Tôi không biết liệu nó có làm như vậy không, nhưng thuật toán của De Boor tương đương với De Casteljeau. Thật thú vị, tôi biết bạn có thể sử dụng thuật toán của De Boor để phân chia một NURBS hoặc b-spline thành một đường cong Bezier của piecewise.
Alan Wolfe

Câu trả lời:


5

Cách mà các đường cong NURBS thường được phân chia tại một điểm tùy ý là bằng cách chèn nút . Bạn chèn các nút thắt tại điểm phân chia cho đến khi nó ở bội số tối đa, tại điểm đó bạn chỉ có thể đọc ra hai đường cong phân chia.

Tuy nhiên, bạn có thể không muốn phân chia tại một điểm tùy ý. Nếu mục đích cuối cùng là vẽ các đường cong hoặc một cái gì đó tương tự, thì đáng để chia đường cong tại các điểm nút hiện có (nghĩa là thực hiện chèn nút cho đến khi tất cả các nút được nhân lên tối đa) thay vì chèn các nút mới.

Quá trình này tách NURBS vào bộ đồng phục hợp lý B-splines. Khi bạn đã có điều đó, bạn có thể sử dụng thuật toán của de Boor để phân chia thêm.

Số lượng nút thắt trong vector nút là:

numKnots = degreeOfCurve + numControlPoints + 1

hoặc nếu bạn thích:

numKnots = orderOfCurve + numControlPoints

Chèn một nút do đó làm tăng số lượng điểm kiểm soát một.

Khi bạn di chuyển dọc theo một đường cong NURBS, mỗi nút thắt biểu thị một nơi mà một điểm kiểm soát "rơi ra" và một điểm khác "đi vào". Nếu một giá trị nút được lặp lại, điều này có nghĩa là nhiều hơn một điểm kiểm soát được thay thế tại nơi này.

Đối với đường cong có độ lớn hơn 1, các nút thắt cuối cùng được lặp lại nhiều lần vì một lý do đơn giản: bạn cần mang nhiều hơn một điểm để bắt đầu và bạn cần đẩy ra nhiều hơn một điểm để kết thúc.

Bây giờ chúng ta hãy nghĩ về các đường cong hình khối, chỉ để giữ cho mọi thứ đơn giản.

Đường cong có vectơ nút [0,0,1,1] là đường cong B-spline đồng nhất.

Một đường cong có vectơ nút [0,0,1,1,2,2] không đồng nhất, nhưng có thể được coi là hai đường cong B-spline đồng nhất kết nối tại t = 1, một tương ứng với [0,0 , 1,1] và một tương ứng với [1,1,2,2]. Bạn có thể làm điều này bởi vì bội số của các nút là đủ để "bắt đầu" và "kết thúc" một đường cong hình khối.

Nếu bạn phải đối mặt với một đường cong có vectơ nút thắt như [0,0,1,2,2], bạn có thể chèn một nút ở 1 mà không thay đổi hình dạng của đường cong (đây là quy trình chèn nút). Điều này làm tăng số lượng điểm kiểm soát lên một; thủ tục chèn nút điều chỉnh các điểm xung quanh nút thắt mới để chứa nó. Nhưng một khi bạn đã làm điều đó, bạn có hai đường cong B-spline đồng đều.

Việc chèn nút sẽ không tạo ra các điểm kiểm soát chồng chéo trừ khi bạn chèn quá nhiều nút ở cùng một vị trí và bởi "quá nhiều", ý tôi là mức độ của đường cong. Vì vậy, đối với đường cong hình khối không đồng nhất, bạn sẽ chèn các nút thắt để mỗi nút có bội số 2. Điều đó mang lại cho bạn một số đường cong hình khối đồng nhất, sau đó bạn có thể sử dụng thuật toán của de Boor để phân tách thêm.


Tôi xin lỗi tôi rất mới với NURBS: ý bạn là gì khi "bội số tối đa"? Ý tôi là, khi tôi làm theo cách trước, tôi có kết thúc với nhiều điểm kiểm soát chồng chéo không?
Ecir Hana ngày 26/8/2015

Hãy để tôi cố gắng giải thích trong câu trả lời.
Bút danh

1
Bút danh err no không phải là một vector nút tốt để chứng minh điều này. Tôi thấy rằng tôi có thể cần phải mở rộng bài viết khác. Rõ ràng @EcirHana có thể là một ý tưởng tốt để hỏi đa dạng là gì.
joojaa

Bạn có thể đúng về điều đó @joojaa.
Bút danh
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.