首页 > 编程知识 正文

线性插值基函数,拉格朗日插值基函数性质

时间:2023-05-06 01:16:08 阅读:38650 作者:1536

在unity3D中,经常使用两种材质之间、两个向量之间、两个浮点数之间和两种颜色之间的线性插值函数Lerp ()。 函数的原型如下。

Material.Lerp插值

function lerp (开始:材料,结束:材料,t :浮动) : void

在两种材质之间插值

Vector2.Lerp插值

staticfunctionlerp (from :vector2,to : Vector2,t : float ) : vector 2

两个向量之间的线性插值。 根据数值t在form和to之间插值。

t夹在0和1之间。 t=0时,返回from。 t=1时,返回to。 如果t=0.5,则返回from和to的平均值。

Vector3.Lerp插值

staticfunctionlerp (from :vector3,to : Vector3,t : float ) : vector 3

两个向量之间的线性插值。 根据数字t在from和to之间插值。

Vector4.Lerp插值

staticfunctionlerp (from :vector4,to : Vector4,t : float ) : vector 4

两个向量之间的线性插值。 根据数字t在from和to之间插值。 t是[0.1]之间的值。t=0时,返回from。 t=1时,返回to。 t=0.5返回from和to的平均值。

Mathf.Lerp插值

staticfunctionlerp (从:浮动,到:浮动,t :浮动) :浮动) :浮动

基于浮点数t返回a到b之间的插值,t被限制在0到1之间。 如果t=0,则返回from;如果t=1,则返回to。 t=0.5返回from和to的平均值。

Color.Lerp插值

staticfunctionlerp(a: Color,b : Color,t : float ) :color

用t在颜色a和b之间插值。

“t”是介于0和1之间的值。 如果t为0,则返回颜色a。 如果t为1,则返回颜色b。

插值正如文字所示,是在其间插入数值的理解是正确的吗? 首先,让我们从最简单的浮点数插值函数开始分析。

Mathf.Lerp插值

staticfunctionlerp (从:浮动,到:浮动,t :浮动) :浮动) :浮动

基于浮点数t返回a到b之间的插值,t被限制在0到1之间。 如果t=0,则返回from;如果t=1,则返回to。 t=0.5返回from和to的平均值。

首先,让我们做一个启动Unity3D的实验。 高贵的丸子创建脚本文件,并在其Start ()中键入:

Void开始() }

print(mathf.lerp ) 0.0f、100.0f、0.0f ).ToString ();

print(mathf.lerp ) 0.1f、100.0f、0.1f ).ToString ();

print(mathf.lerp ) 0.2f、100.0f、0.2f ).ToString ();

print(mathf.lerp ) 0.3f、100.0f、0.3f ).ToString ();

print(mathf.lerp ) 0.4f、100.0f、0.4f ).ToString ();

print(mathf.lerp ) 0.5f、100.0f、0.5f ).ToString ();

print(mathf.lerp ) 0.6f、100.0f、0.6f ).ToString ();

print(mathf.lerp ) 0.7f、100.0f、0.7f ).ToString ();

print(mathf.lerp ) 0.8f、100.0f、0.8f ).ToString ();

print(mathf.lerp ) 0.9f、100.0f、0.9f ).ToString ();

print(mathf.lerp ) 1.0f、100.0f、1.0f ).ToString ();

}

运行Unity时,控制台将打印以下内容:

这个实验是在0到100之间插值的,插入哪个值取决于第三个参数。 从打印结果中可以看到,第三个参数是比例因子,0.1表示0到100长度的十分之一。 同样,0.2表示十分之二。 同样,0.2表示十分之二。 从这一点来看

,我们起初从字面上所理解的插值就是插入一个数值是可以这样理解的。

 

如果我们把上面那个脚本里的插值函数里的第一个参数变为100.0f,第二个参数变为110.0f,第三个参数保持不变,大家想想其运行结果该是什么呢?可不要认为是0、1、2、3、4、5、6、7、8、9、10了哟,实际结果是100、101、102、103、104、105、106….,因插值是把值插在原来的两数之间,这说明这个函数首先是根据第三个参数所给定的比例算出净增量,再加上起始数,最终算出插值值的。

在Unity3D游戏开发中,应用最多的是Vector3.Lerp 向量插值,下面我们以此插值来猜推其内部实现机理以及一些应用。

如图,在空间中存在两点A(0,10,0)与B(10,0,-10),我们在A、B两点间插入一C点,假设C点的位置在AB的五分之二处,即AC/AB=0.4,根据相似图形对应边成比例的初中几何知识可知,在⊿ABO中AC/AB=OD/OB,同理在⊿OBF中OD/OB=OE/OF,所以AC/AB=OD/O=OE/OF = 0.4,则C点的X坐标值为:OE=0.4*OF=0.4*10=4。

根据上图,还可知ED/FB=0.4,所以C点的Z坐标值DE=0.4*BF=0.4*(-10)=-4。

C点的Y坐标值请看下图:


Lerp函数在游戏开发过程使用较多,在Unity的帮助文档里就有为我们列举了Vector3.Lerp的两个应用的例子,一个是在1秒时间动画位置移动从start.position开始到end.position结束:

using UnityEngine;

usingSystem.Collections;

public classexample : MonoBehaviour {
         public Transform start;

         public Transform end;

         void Update() {
                   transform.position =Vector3.Lerp(start.position, end.position, Time.time);

         }

}

另一个例子:

//像弹簧一样跟随目标物体

using UnityEngine;

usingSystem.Collections;

public classexample : MonoBehaviour {
         public Transform target;

         public float smooth = 5.0F;

         void Update() {
                   transform.position =Vector3.Lerp(transform.position, target.position, Time.deltaTime * smooth);

         }

}

这个例子中的transform.position是去跟随的那个物体的空间坐标,target.position是目标物体的空间坐标,整句的结果是让跟随物体的坐标不断地变化为它们两者之间的插值,然而随着时间的推移,第三个参数的值最终会为1,所以最终跟随物体的位置会与目标物体重合的。我们以前所玩的游戏中,主人公身上依附着一只宠物如鹰,主人公移动时,鹰会跟随着飞动,主人公移动得快它就飞行跟动得快,始终不会离开主人公,使用Lerp插值函数就可实现。
 
原文链接:https://blog.csdn.net/qq_34552886/article/details/70187190

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。