std::lerp
De cppreference.com
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.
Contenido |
[editar] Parámetros
a, b, t | - | Valores de punto flotante o tipos enteros. |
[editar] 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).
[editar] 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
[editar] Véase también
(C++20) |
Punto medio entre dos números o punteros (plantilla de función) |