如何线性插值到不恒定的目的地
How to linearly interpolate to destination that is not constant
如果我想在二维平面上从点A(源(到点B(目的地(进行线性插值,我可以这样做。这里的Vector2是一个由x和y浮点组成的结构。
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);
}
通过这种方式,我可以用给定的增量从源到目的地进行插值。然而,如果我有一个不恒定的目标向量呢?假设用户可以通过将鼠标光标指向二维平面来更改目的地。对象应该线性插值到目标向量。
我可以做这样的事情,但它不是线性插值,而是更像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;
}
相关文章:
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 将使用太多的纹理插值器 - 带旋转的着色器
- 升压插值条件变量可以虚假唤醒吗?
- 如何获得插值极坐标?
- 如何线性插值到不恒定的目的地
- 向心Catmull-Rom样条曲线插值alpha参数
- 使用 OpenGL 插值数据缓冲区?
- 缩放和插值数组
- 骨骼动画:变换矩阵(collada)之间的插值
- 从一组点C++平面插值
- 从 C++14 到 C++98 的端口字符串插值
- 将矢量的数据扩展到指定大小(插值)
- 双线性插值实现的错误
- 如何避免线性插值"trap"?
- 使用 DirectX 11 插值背景颜色?
- OpenGL 缺陷 - 不需要的插值
- 如何在三角形曲面细分评估着色器中插值 UV 映射坐标?
- 将 N 个公式替换为一个(字符串插值)
- C++ - 处理几何插值中的浮点误差
- 双三次插值结果与FFMPEG不同