LERP - Nội suy tuyến tính
Tôi đã đưa ra câu trả lời này cho một vấn đề tương tự vài ngày trước, nhưng ở đây chúng tôi đi:
Nội suy tuyến tính là một hàm cung cấp cho bạn một số giữa hai số, dựa trên tiến trình. Bạn thực sự có thể, có được một điểm giữa hai điểm.
Công thức tuyệt vời - Cách tính toán
Công thức LERP chung được đưa ra bởi pu = p0 + (p1 - p0) * u
. Ở đâu:
- pu: số kết quả
- p0: Số ban đầu
- p1: Số cuối cùng
- u: Sự tiến bộ. Nó được đưa ra theo tỷ lệ phần trăm, từ 0 đến 1.
Cách lấy phần trăm
Bạn có thể tự hỏi, "Làm thế nào tôi có thể có được tỷ lệ phần trăm này!?". Đừng lo lắng. Nó giống như thế này: Mất bao nhiêu thời gian để di chuyển để bắt đầu vectơ kết thúc? Ok, chia nó cho thời gian đã trôi qua. Điều này sẽ cung cấp cho bạn tỷ lệ phần trăm.
Hãy nhìn xem, một cái gì đó như thế này: percentage = currentTime / finalTime;
Tính toán vectơ
Để có được một vectơ kết quả, tất cả những gì bạn cần làm là áp dụng công thức hai lần, một cho thành phần X và một cho thành phần Y. Một cái gì đó như thế này:
point.x = start.x + (final.x - start.x) * progress;
point.y = start.y + (final.y - start.y) * progress;
Tính thời gian phương sai
Bạn có thể muốn có điểm của mình để di chuyển với tốc độ 0,5 điểm, đúng không? Vì vậy, giả sử, một quãng đường dài hơn sẽ được di chuyển trong một thời gian dài hơn.
Bạn có thể làm như sau:
Lấy chiều dài khoảng cách cho nó, bạn sẽ cần hai thứ. Lấy vectơ khoảng cách, sau đó biến đổi nó thành một giá trị độ dài.
distancevec = final - start;
distance = distancevec.length();
Tôi hy vọng bạn biết toán học vectơ. Nếu bạn không, bạn có thể tính toán chiều dài vectơ theo công thức này d = sqrt(pow(v.x, 2) + pow(v.y, 2));
.
Nhận thời gian nó sẽ mất và cập nhật thời gian cuối cùng. Điều này là dễ dàng. Khi bạn muốn mỗi đánh dấu bạn nhận được 0,5 chiều dài, chúng ta chỉ cần chia và nhận được bao nhiêu đánh dấu chúng ta có.
finalTime = distance / 0.5f;
Làm xong.
THÔNG BÁO: Có thể, đây có thể không phải là tốc độ dự định cho bạn, nhưng đây là quyền. do đó bạn có một chuyển động tuyến tính, ngay cả trên các di chuyển chéo. Nếu bạn muốn làm x + = 0,5f, y + = 0,5f, sau đó đọc sách toán học vectơ và kiểm tra lại kế hoạch của bạn.
goal_dist
trongif
tình trạng của bạn ?