Đó 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 xvà ythà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 tdọ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_Bdi chuyển tdọc theo đoạn bezier. Hãy nói rằng nó đi từ 0đếnL .
Bây giờ chọn ncác giá trị giữa 0và Ltương ứng với các điểm cách đều nhau. Ví dụ: độ dài của biểu mẫu k*L/ncho ktừ 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 tsau 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])).
ttrong 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.