LERP - Doğrusal İnterpolasyon
Birkaç gün önce benzer bir soruna bu cevabı verdim, ama başlıyoruz:
Doğrusal Enterpolasyon, ilerlemeye bağlı olarak size iki sayı arasında bir sayı veren bir işlevdir. Aslında, iki nokta arasında bir nokta elde edebilirsiniz.
Büyük Formül - Nasıl hesaplanır
Genel LERP Formülü tarafından verilir pu = p0 + (p1 - p0) * u
. Nerede:
- pu: Sonuç numarası
- p0: İlk sayı
- p1: Son sayı
- u: İlerleme. Yüzde 0 ile 1 arasında verilir.
Yüzde nasıl alınır?
"Bu yüzdeyi nasıl alabilirim !?" diye merak ediyor olabilirsiniz. Endişelenme. Bu şöyledir: Başlangıç vektörünün bitmesi için ne kadar zaman geçmesi gerekir? Tamam, daha önce geçen zamana bölün. Bu size yüzdeyi verecektir.
Bak, şöyle bir şey: percentage = currentTime / finalTime;
Vektörleri Hesaplama
Sonuçta elde edilen bir vektör elde etmek için tek yapmanız gereken, biri X bileşeni diğeri Y bileşeni için formülü iki kez uygulamaktır. Bunun gibi bir şey:
point.x = start.x + (final.x - start.x) * progress;
point.y = start.y + (final.y - start.y) * progress;
Değişken zamanı hesaplama
Puanlarınızın 0,5 puan hızında seyahat etmesini isteyebilirsiniz, evet? Diyelim ki, daha uzun bir süre daha uzun bir mesafe kat edilecek.
Aşağıdaki gibi yapabilirsiniz:
Mesafe uzunluğunu al Bunun için iki şeye ihtiyacınız olacak. Mesafe vektörü alın, sonra uzunluk değerine dönüştürün.
distancevec = final - start;
distance = distancevec.length();
Umarım vektörleri matematik bilirsiniz. Bunu yapmazsanız, bu formülle bir vektör uzunluğunu hesaplayabilirsiniz d = sqrt(pow(v.x, 2) + pow(v.y, 2));
.
Süreyi alın ve son zamanı güncelleyin. Bu kolay. Her bir kene için 0.5 uzunluk elde edersiniz, sadece bölmeliyiz ve kaç tane kenemiz var.
finalTime = distance / 0.5f;
Bitti.
DİKKAT: Belki bu sizin için tasarlanan hız olmayabilir, ancak bu doğru. böylece köşegen hareketlerde bile doğrusal bir hareketiniz olur. X + = 0.5f, y + = 0.5f yapmak istiyorsanız, bir vektör matematik kitabı okuyun ve planlarınızı tekrar kontrol edin.
goal_dist
sizin deif
durum?