math - 三次/五次线性插值
问题描述
下面是一个线性插值函数:
float lerp (float a, float b, float weight) {
return a + weight * (b - a);
}
下面是三次插值函数:
float cubic (float p1, float p2, float p3, float p4, float weight) {
float m = weight * weight;
float a = p4 - p3 - p1 + p2;
float b = p1 - p2 - a;
float c = p3 - p1;
float d = p2;
return a * weight * m + b * m + c * weight + d;
}
以下方法的名称是什么?:
float lerp (float a, float b, float weight) {
float v = weight * weigth * (3.0f - 2.0f * weight);
return a + v * (b - a);
}
我见过一些人将上述方法称为“三次”,但对我来说,三次插值需要 4 个点。
此外,我还看到了以下内容:
float lerp (float a, float b, float weight) {
float v = weight * weight * weight * (weight * (weight * 6.0f - 15.0f) + 10.0f);
return a + v * (b - a);
}
上面的代码被称为“五次方”,但我不确定这些函数如何在没有必要的额外“点”的情况下成为“三次方”和“五次方”。
对“权重”执行的这些操作的名称是什么?
float v = weight * weigth * (3.0f - 2.0f * weight);
float v = weight * weight * weight * (weight * (weight * 6.0f - 15.0f) + 10.0f);
解决方案
“三次”是“三次多项式”的另一个词。
“五次”是“五次多项式”的另一个词。
参数的数量无关紧要。P(x) = x*x*x
是一个“三次”多项式,即使没有参数。
对“权重”执行的这些操作的名称是什么?
...
这些函数被称为“smoothstep”。Smoothstep 函数是一组奇数多项式。第一个是 3 度(或“三次”)平滑步,第二个是 5 度(或“五次”)平滑步。
推荐阅读
- python - 如何像 np.random.seed 一样为 pd.sample 制作种子?
- java - 使用套接字循环时 Java Fx 无法正常工作
- maven - 无法解析 mojo org.apache.maven.plugins:maven-shade-plugin:3.0.0:shade 参数转换器的配置
- java - 数据流中的动态目标问题
- api - 使用 v2 OAuth 2.0 Linkedin API 点赞帖子/评论
- javascript - JavaScript calc 函数 - 切换到 Bootstrap4 后不再起作用
- angular - Angular 单元测试启动日历
- java - 如何通过批处理脚本下载 JRE 包
- java - 如何在 android 中使用 webView 获取 Auth 令牌?
- javascript - 通过 Javascript/jQuery 在智能手机上以全屏模式打开 MP4 视频