Chỉnh sửa: thay đổi câu trả lời theo hình ảnh mới và làm rõ.
for every control point p(k, n)
p'(k, n) = ( p(k, n) - p(k) ) * d * l(k) + p(k, n)
trong đó k
chỉ số hàng và n
là chỉ số cột của điểm kiểm soát. l
là hệ số độ cao và bằng {-1, -1/3, 1/3, 1}. p(k)
là trung tâm của hàng thứ k'th.
Cơ sở lý luận:
Từ những hình ảnh mới, các đường màu đỏ và màu xanh được vẽ từ tâm của đường (p (k) về cơ bản là (k, 0)) đến điểm đó. Trên dòng đầu tiên, tất cả các điểm kiểm soát, bao gồm cả các điểm trên biểu đồ (đường màu đỏ) được di chuyển đến cùng một điểm trên dòng đó. p (k, n) - p (k) cho vectơ di chuyển một điểm từ p (k) sang p (k, n) mà bây giờ nên được áp dụng cho cách khác, di chuyển điểm đến vị trí mong muốn. Trên biểu đồ của bạn, d = 1 để tất cả các điểm dòng đầu tiên sẽ được di chuyển đến trung tâm. Bạn có thể dễ dàng giải phương trình để xác minh điều này. d * l(0)
là -1, vì vậy nó -p(k, n) + p(k) + p(k, n)
sẽ cung cấp cho p (k).
Trên dòng thứ hai, dòng màu xanh của bạn một lần nữa từ điểm đến trung tâm, nhưng lần này nó dừng lại trước khi tiếp cận nó. Tôi không thể biết nếu nó thực sự được cắt từ 1/3 nhưng đó sẽ là một điểm khởi đầu tốt. Vì vậy, công thức tương tự vẫn được áp dụng. l là -1/3 d là 1, vì vậy điểm sẽ được di chuyển theo 1/3 trên đường đi. Thứ 3 giống như thứ hai nhưng bây giờ nó di chuyển ra ngoài, do đó l là 1/3.
Trên dòng cuối cùng, tất cả các điểm kiểm soát được chuyển ra từ điểm trung tâm của dòng đó. Điều này khá rõ ràng vì các dòng của bạn gặp nhau tại trung tâm đó.
Vấn đề duy nhất mà công thức này có thể có là giả định là 1/3, ngoài ra tôi không thấy lý do tại sao nó phải thất bại.
Lưu ý: Tôi đã sử dụng hàng, cột trong khi lập chỉ mục, do đó, nếu bạn đang sử dụng x, y bạn nên chuyển đổi vị trí của chúng.