Việc chia đường cong Bezier thành hai phần tại một số tham số t
rấ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?
Việc chia đường cong Bezier thành hai phần tại một số tham số t
rấ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?
Câu trả lời:
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.