Đó là nhiều hơn một câu hỏi toán học. Vì vậy, một đường cong bezier có công thức sau , cả trong x
và y
thành phần.
B_x(t) = (1-t)^3 * P0_x + (1-t)^2 * t * P1_x + (1-t) * t^2 * P2_x + t^3 * P3_x
B_y(t) = (1-t)^3 * P0_y + (1-t)^2 * t * P1_y + (1-t) * t^2 * P2_x + t^3 * P3_y
Độ dài di chuyển t
dọc theo một đường cong gamma
được cho bởi:
length_gamma(t) = integration( sqrt( derivative( gamma_x(s) ) ^2 + derivative( gamma_y(s) ) ^2 ) )
Không có giải pháp nào có thể ghi được cho con người cho tích phân, vì vậy bạn phải tính gần đúng.
Thay thế gamma(t)
biểu thức B(t)
để có được độ dài length_B
di chuyển t
dọc theo đoạn bezier. Hãy nói rằng nó đi từ 0
đếnL
.
Bây giờ chọn n
các giá trị giữa 0
và L
tương ứng với các điểm cách đều nhau. Ví dụ: độ dài của biểu mẫu k*L/n
cho k
từ 0
đếnn
.
Bây giờ bạn cần nghịch đảo hàm length_B
, vì vậy bạn có thể tính toán mặt t
sau từ độ dài l
. Đó là khá nhiều toán học và tôi lười biếng như địa ngục, hãy thử tự làm nó. Nếu bạn không thể, bạn có thể đi đến stackexchange toán học . Để có câu trả lời đầy đủ hơn, dù sao bạn cũng có thể đến đó.
Khi bạn có hàm nghịch đảo đó length_B
(hoặc xấp xỉ hợp lý), bạn xử lý khá đơn giản.
- Tạo độ dài
l[k]
của khoảng cách đường dẫn đã cho từ gốc(P0_x,P1_x)
.
- Tính toán tương ứng của họ
t[k]
bằng cách sử dụnglength_B_inverse
.
- Đặt điểm sử dụng
(B_x(t[k]),B_y(t[k]))
.
t
trong 100 bước và đo khoảng cách giữa các điểm kết quả. Sau đó, nội suy dọc theo polyline này như mong muốn.