Có vẻ như bạn muốn giữ tốc độ của đối tượng ở một giá trị không đổi trên toàn bộ đường cong - biết độ dài cung sẽ không giúp bạn làm điều này. Nó sẽ giúp bạn tính toán thời điểm đối tượng sẽ đạt đến điểm cuối của nó nếu nó đang ở tốc độ đó, vì vậy nó sẽ tốt hơn những gì bạn có bây giờ (đối tượng sẽ có cùng tốc độ trung bình giữa tất cả các điểm), nhưng tốc độ thực tế của vật thể vẫn sẽ thay đổi khi nó di chuyển xung quanh đường cong.
Một giải pháp tốt hơn là thay đổi tham số tham số của chúng tôi (tham số đi từ 0 thành 1, tôi sẽ gọi s
để tránh nhầm lẫn t = time
) với tốc độ thay đổi ds/dt
, được xác định bởi tốc độ bạn muốn đối tượng di chuyển ở tốc độ nào điểm đó trên đường cong. Vì vậy, nói cách khác, thay vì thay đổi s
0,01 mỗi khung hình, chúng ta có thể thay đổi nó bằng 0,005 một khung hình, 0,02 khung hình tiếp theo, v.v.
Chúng tôi thực hiện điều này bằng cách tính các đạo hàm của x
( dx/ds
) và y
( dy/ds
) mỗi khung, sau đó đặt
ds / dt = speed / sqrt ((dx / ds) 2 + (dy / ds) 2 )
Đó là, bằng cách lấy tốc độ chúng ta muốn đi và chia cho tốc độ chúng ta thực sự sẽ đi nếu chúng ta thay đổi s
ở một mức tăng cố định.
Bằng chứng
Chúng tôi muốn tốc độ của đối tượng của chúng tôi là không đổi; Hãy đặt tên đó không đổi speed
.
Chúng ta học trong phép tính năm thứ hai rằng, đối với các phương trình tham số x(s)
và y(s)
,
tốc độ = sqrt ((dx / dt) 2 + (dy / dt) 2 )
Chúng tôi cũng học được rằng
dx / dt = dx / ds * ds / dt (quy tắc chuỗi)
Như vậy
speed = sqrt ((dx / ds) 2 (ds / dt) 2 + (dy / ds) 2 (ds / dt) 2 )
Giải cho ds/dt
, chúng ta có được phương trình đã nêu.
Tính đạo hàm
Tôi chưa bao giờ làm việc với các spline cụ thể đó, nhưng tôi hiểu họ chỉ đưa ra x(s)
và y(s)
về phương trình bậc ba s
. Vì vậy, chúng ta có thể tìm thấy đạo hàm dx/ds
một cách dễ dàng: nếu
x (s) = a * s 3 + b * s 2 + c * s + e
sau đó
dx / DS = 3a * s 2 + 2b * s + c
(Tương tự cho dy/ds
) Tất nhiên, bạn sẽ cần phải biết các giá trị chính xác của a
, b
và c
để làm điều này. Theo trang này , những giá trị rất dễ tìm.
Cuối cùng, để trả lời câu hỏi trong tiêu đề: tìm phương trình độ dài cung của hàm tham số liên quan đến việc giải một tích phân xác định khá phức tạp ; ngay cả đối với trường hợp đơn giản của phương trình bậc ba, điều này thường không thể thực hiện được.
Do đó, bạn sẽ phải ước tính số nguyên . "Cắt spline thành 10 đường thẳng và tính tổng độ dài của chúng" như bạn đề xuất là một cách rất đơn giản để làm điều này ; tuy nhiên, có các phương pháp phức tạp hơn một chút sẽ cho bạn kết quả chính xác hơn nhiều bằng cách sử dụng ít phân đoạn dòng hơn.