欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

matlab 里catmull rom,Unity中的曲线插值CatmullRom

发布时间:2025/3/17 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 matlab 里catmull rom,Unity中的曲线插值CatmullRom 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

ps:博客从typecho换成jekyll后,文章复制到简书来因为图片链接原因变得麻烦了。- -!

正文

之前写了个插件,有个需要曲线插值的功能。给定一些点的位置,物体成一条平滑曲线依次通过这些点。

Bezier曲线是在Unity里比较常用的,但是不适合这里的需求。因为Bezier无法通过所有的点,它需要有另外的点来构造切线。如下图:

图1

Bezeir

查了资料发现CatmullRom曲线可以平滑的通过所有点,满足需求,如下图:

图2

CatmullRom

可以看这里的介绍。

在Unity中C#脚本的实现:

///

/// Catmull-Rom 曲线插值

///

///

///

///

///

/// 0-1

///

public static Vector3 CatmullRomPoint(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t)

{

return p1 + (0.5f * (p2 - p0) * t) + 0.5f * (2f * p0 - 5f * p1 + 4f * p2 - p3) * t * t +

0.5f * (-p0 + 3f * p1 - 3f * p2 + p3) * t * t * t;

}

需要注意的是,接受参数p0-p3四个点后,所得的曲线为p1和p2之间的。所以要得到多个点构造的曲线,首位部分需要特殊处理下,比如:CatmullRomPoint(p0,p0,p1,p2,t); 这样可以得到p0和p1之间的曲线。

在Unity中绘制出来:

CatmullRom-Unity

总结

以上是生活随笔为你收集整理的matlab 里catmull rom,Unity中的曲线插值CatmullRom的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。