Ce face std::lerp
std::lerp(a, b, t) returnează a pentru t = 0, b pentru t = 1 și valorile intermediare pentru t între ele. Pentru t în afara intervalului [0, 1] extrapolează.
Este folosit în animații, jocuri, grafică (trecerea treptată de la o culoare la alta) și în calcule de tip „cât la sută din drum”. Implementarea standard garantează rezultate exacte la capete, ceea ce formula scrisă de mână nu garantează mereu.
Parametri
| Parametru | Descriere |
|---|---|
a, b |
Capetele. |
t |
Fracțiunea (0 = a, 1 = b). |
Ce returnează
Valoarea interpolată.
Exemple
Exemplul 1: Valori între 10 și 20
#include <cmath>
#include <print>
int main() {
for (double t : {0.0, 0.25, 0.5, 1.0, 1.5}) {
std::println("lerp(10, 20, {}) = {}", t, std::lerp(10.0, 20.0, t));
}
}
Rezultat
lerp(10, 20, 0) = 10
lerp(10, 20, 0.25) = 12.5
lerp(10, 20, 0.5) = 15
lerp(10, 20, 1) = 20
lerp(10, 20, 1.5) = 25
Exemplul 2: O bară de progres care se mișcă lin
#include <cmath>
#include <print>
int main() {
double pozitie = 0.0;
double tinta = 100.0;
for (int cadru = 1; cadru <= 5; ++cadru) {
pozitie = std::lerp(pozitie, tinta, 0.5);
std::println("Cadrul {}: {:.2f}%", cadru, pozitie);
}
}
Rezultat
Cadrul 1: 50.00%
Cadrul 2: 75.00%
Cadrul 3: 87.50%
Cadrul 4: 93.75%
Cadrul 5: 96.88%
Greșeli frecvente
- Confunzi
std::lerp(C++20, în<cmath>) custd::midpoint(în<numeric>), care dă doar mijlocul.
Comenzi înrudite
std::midpoint: Calculează mijlocul dintre două numere (sau pointeri) fără risc de depășire a limitei tipului.std::clamp: Limitează o valoare la un interval: o aduce la minim dacă e prea mică și la maxim dacă e prea mare.std::fmin: Returnează minimul (fmin) sau maximul (fmax) a două numere cu virgulă, ignorând o valoare NaN.