lerp — std::lerp

lerp — std::lerp (선형 보간)

std::lerp는 두 값 사이를 **선형 보간(linear interpolation)**해요. C++20에서 도입됐어요.

t가 0이면 a, 1이면 b를 반환하고, 그 사이의 값은 선형으로 보간돼요.

출처: cppreference

본문

// <cmath> 헤더, C++20
constexpr float       lerp( float a, float b, float t ) noexcept;
constexpr double      lerp( double a, double b, double t ) noexcept;
constexpr long double lerp( long double a, long double b, long double t ) noexcept;

t가 0이면 a, 1이면 b, 0과 1 사이면 비례 보간을 반환해요.

#include <cmath>

std::lerp(0.0, 10.0, 0.5);  // 5.0 (중간)
std::lerp(0.0, 10.0, 0.0);  // 0.0
std::lerp(0.0, 10.0, 1.0);  // 10.0
std::lerp(0.0, 10.0, 2.0);  // 20.0 (범위 밖도 외삽)

특징

  • constexpr — 컴파일 타임 사용 가능.
  • t가 [0,1]을 벗어나면 외삽(extrapolation)돼요.
  • std::numbers 상수 등과 함께 애니메이션·그래픽·보간 시나리오에서 유용.
// 애니메이션 보간 예
double t = 0.0;
double pos = std::lerp(start, end, t);   // start→end 보간

수학적 정의

lerp(a, b, t) = a + t * (b - a)와 유사하지만, 수치적으로 더 안정적인 방식으로 계산돼요. 큰 값에서도 정확도가 좋아요.

// 게임에서 두 점 사이를 부드럽게 이동
double mix = std::clamp(delta, 0.0, 1.0);
auto value = std::lerp(min, max, mix);

std::lerp는 애니메이션, 그래픽, 물리, 머신러닝 등 보간이 필요한 곳에서 표준적으로 쓰이는 함수예요.

더 알아보기 (Learn more)

cppreference