什么是插值?
是什么?很简单! 已知两点,推断中间的每一点的过程。
有什么用? 很简单!位置从30到40耗时3秒求每一时刻的位置!
1.线性插值
设v是结果,start是开始,end是结尾,t是过去的时间,duration是总时间
v = start + (end - start) * (t / duration)
public static float Lerp(float start, float end, float step)
{
return start + step * (end - start);
}
2.三角插值
不要害怕,很简单,举个例子
已知 ABC三点的气温,平滑的求红色点的预测气温
求出这个点与ABC构成的三个三角形的面积,以及三角形ABC的面积。
gamma = Power C = (中心点和AB两点的三角形面积 / 大三角形面积)
beta = Power B = (中心点和AC两点的三角形面积 / 大三角形面积)
alpha = Power A = (中心点和BC两点的三角形面积 / 大三角形面积)
预测温度 = A权 * A温度 + B权 * B温度 + C权 * C温度
public static float Interpolate(Vector2 a, Vector2 b, Vector2 c, float tpA, float tpB, float tpC, Vector2 pos)
{
float area = CalculateTriangleArea(a, b, c);
// 计算点相对于三个顶点的重心坐标
float alpha = CalculateTriangleArea(pos, b, c) / area;
float beta = CalculateTriangleArea(a, pos, c) / area;
float gamma = CalculateTriangleArea(a, b, pos) / area;
// 使用重心坐标进行颜色插值
float temp = alpha * tpA + beta * tpB + gamma * tpC;
return temp;
}
/// <summary>
/// 计算三角形面积
/// </summary>
/// <param name="p1">点A坐标</param>
/// <param name="p2">点B坐标</param>
/// <param name="p3">点C坐标</param>
/// <returns></returns>
public static float CalculateTriangleArea(Vector2 p1, Vector2 p2, Vector2 p3)
{
return Math.Abs((p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y)) / 2f);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统