2009-07-06 33 views
13

Từ trang web này có vẻ như có thông tin chi tiết nhất về các đường nối catmull-rom: http://www.mvps.org/directx/articles/catmull/ nó đề cập đến việc cần bốn điểm để tạo spline. Tuy nhiên nó không đề cập đến cách các điểm p0 và p3 ảnh hưởng đến các giá trị giữa p1 và p2.Spline Catmull-Rom - chúng hoạt động như thế nào?

Một câu hỏi khác mà tôi có là làm thế nào bạn sẽ tạo ra các chuỗi liên tục? Nó sẽ được dễ dàng như xác định các điểm p1, p2 để được liên tục với p4, p5 bằng cách làm p4 = p2 (đó là giả sử chúng ta có p0, p1, p2, p3, p4, p5, p6 ... pN).

Một câu hỏi tổng quát hơn là làm cách nào để tính toán tiếp tuyến trên splines catmull rom? Nó sẽ phải liên quan đến việc lấy hai điểm trên spline (nói 0,01, 0,001) và nhận được ốp dựa trên pythagoras cho vị trí tọa độ những giá trị đầu vào cho?

+0

Bình thường Catmull-Rom cũng dễ bị các vòng lặp và tự ngã có thể là một vấn đề. Tôi khuyên bạn nên sử dụng tham số centripetal được hiển thị tại đây: http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

Trả lời

8

Hãy xem phương trình 2 - nó mô tả cách các điểm kiểm soát ảnh hưởng đến dòng. Bạn có thể thấy các điểm P0P3 đi vào phương trình để vẽ các điểm dọc theo đường cong từ P1 đến P2. Bạn cũng sẽ thấy rằng phương trình đưa ra P1 khi t == 0P2 khi t == 1.

Phương trình mẫu này có thể được khái quát hóa. Nếu bạn có điểm R0, R1 ... RN sau đó bạn có thể vẽ các điểm giữa RKRK + 1 bằng cách sử dụng phương trình 2 với P0 = RK - 1, P1 = RK, P2 = RK + 1P3 = RK + 2.

Bạn không thể vẽ R0-R1 hoặc từ RN - 1 để RN trừ khi bạn thêm điểm kiểm soát thêm để đứng cho R - 1RN + 1. Ý tưởng chung là bạn có thể chọn bất kỳ điểm nào bạn muốn thêm vào đầu và đuôi của một chuỗi để cung cấp cho mình tất cả các thông số để tính toán đường spline.

Bạn có thể nối hai đường thẳng với nhau bằng cách thả một trong các điểm kiểm soát giữa chúng.Giả sử bạn có R0, R1 ..., RNS0, S1 ... SM chúng có thể được tham gia vào R0, R1 ..., RN - 1, S1, S2 ... SM.

Để tính toán tiếp tuyến bất cứ lúc nào chỉ cần lấy đạo hàm của phương trình 2.

6

Wikipedia article đi sâu hơn một chút. Dạng chung của spline lấy làm 2 điểm điều khiển đầu vào với các vectơ tiếp tuyến liên quan. Các phân đoạn spline bổ sung sau đó có thể được bổ sung miễn là các vectơ tiếp tuyến tại các điểm điều khiển thông thường bằng nhau, giúp duy trì tính liên tục C1.

Ở dạng Catmull-Rom cụ thể, vectơ tiếp tuyến tại các điểm trung gian được xác định bởi vị trí của các điểm kiểm soát lân cận. Do đó, để tạo một đường spline liên tục C1 qua nhiều điểm, nó đủ để cung cấp tập các điểm điều khiển và vectơ tiếp tuyến tại điểm điều khiển đầu tiên và cuối cùng. Tôi nghĩ rằng hành vi tiêu chuẩn là sử dụng P1 - P0 cho vector tiếp tuyến tại P0 và PN - PN-1 tại PN.

Theo bài viết trên Wikipedia, để tính toán tiếp tuyến tại điểm kiểm soát Pn, bạn sử dụng phương trình này:

T(n) = (P(n - 1) + P(n + 1))/2 

này cũng trả lời câu hỏi đầu tiên của bạn. Đối với một bộ 4 điểm điều khiển, P1, P2, P3, P4, các giá trị nội suy giữa P2 và P3 đòi hỏi phải có thông tin tạo thành tất cả 4 điểm kiểm soát. Bản thân P2 và P3 xác định các điểm cuối thông qua đó đoạn nội suy phải đi qua. P1 và P3 xác định vector tiếp tuyến, đoạn nội suy sẽ có điểm P2. P4 và P2 xác định vector tiếp tuyến đoạn sẽ có tại điểm P3. Các vectơ tiếp tuyến tại các điểm điều khiển P2 và P3 ảnh hưởng đến hình dạng của phân đoạn nội suy giữa chúng.

+1

Tôi xin lỗi nếu tôi thiếu một cái gì đó, nhưng bạn có thể chỉ ra nơi trong bài viết nó mang lại công thức đó? Tôi thấy một số khác tại http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline. (Tôi không giỏi toán học đâu. Tôi chỉ muốn biết bạn có công thức như thế nào.) –

Các vấn đề liên quan