std::lerp
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <cmath>
|
||
constexpr float lerp( float a, float b, float t ) noexcept; |
(1) | (desde C++20) |
constexpr double lerp( double a, double b, double t ) noexcept; |
(2) | (desde C++20) |
constexpr long double lerp( long double a, long double b, long double t ) noexcept; |
(3) | (desde C++20) |
constexpr Promoted lerp( Arithmetic1 a, Arithmetic2 b, Arithmetic3 t ) noexcept; |
(4) | (desde C++20) |
1-3) Calcula a+t(b−a), es decir, la interpolación lineal entre
a y b para el parámetro t (o extrapolación, cuando t está fuera del rango [0,1]).4) Un conjuntos de sobrecargas o una plantilla de función para todas las combinaciones de argumentos de tipo aritmético que no se cubren por 1-3). Si cualquiera de los argumentos tiene tipo entero, se convierte a
double. Si cualquier otro argumento es long double, entonces el tipo de retorno es long double; de lo contrario, es double.Parámetros
| a, b, t | - | Valores de punto flotante o tipos enteros. |
Valor de retorno
a+t(b−a)
Cuando isfinite(a) && isfinite(b), se garantizan las siguientes propiedades:
- Si
t == 0, el resultado es igual aa. - Si
t == 1, el resultado es igual ab. - Si
t >= 0 && t <= 1, el resultado es finito. - Si
isfinite(t) && a == b, el resultado es igual aa. - Si
isfinite(t) || (!isnan(t) && b-a != 0), el resultado no esNaN.
Dejemos que CMP(x,y) sea 1 si x > y, -1 si x < y, y 0 de lo contrario. Para cualquier t1 y t2, el producto de CMP(lerp(a, b, t2), lerp(a, b, t1)), CMP(t2, t1), y CMP(b, a) es no-negativo (es decir, lerp es monotónico).
Ejemplos
Ejecuta este código
#include <iostream>
#include <cmath>
int main()
{
float a=10.0f, b=20.0f;
std::cout << "a=" << a << '\n'
<< "b=" << b << '\n'
<< "punto medio=" << std::lerp(a,b,0.5f) << '\n'
<< std::boolalpha << (a == std::lerp(a,b,0.0f)) << '\n';
}
Salida:
a=10
b=20
punto medio=15
true
Véase también
(C++20) |
Punto medio entre dos números o punteros (plantilla de función) |