c++ - 如何线性插值到不恒定的目的地

标签 c++ math interpolation

如果我想在二维平面上从点 A(源)到点 B(目标)进行线性插值,我可以这样做。这里的 Vector2 是一个由 x 和 y float 组成的结构体。

 Vector2 Interpolate(Vector2 source, Vector2 destination, float delta) {
      return source+(destination-source)*delta;
 }

 void OnEachUpdate() {
   delta += 0.05f;
   delta = max(delta, 1.0f);
   currentVector = Interpolate(source, destination, delta);
 }

这样我就可以使用给定的增量从源到目标进行插值。但是,如果我的目标 vector 不是常数怎么办?假设用户可以通过将鼠标光标指向二维平面来更改目的地。对象应线性插值到目标 vector 。

我可以做这样的事情,但它不是线性插值,而是更像 S 形,这不是我想要的。

 delta = 0.05f;
 currentVector += Interpolate(currentVector, destination, delta);

最佳答案

既然你说你想保持速度恒定,我假设你想要这个:

float speed = whatever;
float delta_x = target_x - current_x;
float delta_y = target_y - current_y;
float dist_sqr = delta_x*delta_x + delta_y*delta_y;
if (dist_sqr <= speed*speed)
{
    // The destination is reached.
    current_x = target_x;
    current_y = target_y;
}
else
{
    float dist = std::sqrt(dist_sqr);
    current_x += delta_x / dist * speed;
    current_y += delta_y / dist * speed;
}

关于c++ - 如何线性插值到不恒定的目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882209/

相关文章:

c++ - 错误 : expected primary-expression before '{' token

c++ - 对 FCGI 概念感到困惑

java - 离散余弦变换实现

php - 生成一个介于 1 和 x 之间的随机数,其中较小的数字比较大的数字更有可能

javascript - Angular 2,添加 calc() 作为内联样式。使用括号的不安全插值

c++ - 是否可以通过 Windows 键(可能没有钩子(Hook))捕获 Windows 开始菜单弹出窗口?

c# - 实时 555 c# 包装器

algorithm - 构造颜色以获得最大对比度

python - SciPy 插值错误

c++ - 在两个四元数之间插值很长