Hermite

 
 
 

沿 Hermite 曲线返回值。例如,可以使用 Hermite 函数沿曲线平滑地移动粒子对象的位置。如以下页中的示例所示,可以通过改变 Hermite 函数的参数来创建各种曲线形状。

vector hermite(vector start, vector end, vector tan1, vector tan2, float parameter)

float hermite(float start, float end, float tan1, float tan2, float parameter)

start 为曲线的起点。

end 为曲线的终点。

tan1 是切向向量,用于控制曲线在离开曲线的起点时的方向和形状。向量的位置在曲线的起点开始。

tan2 是切向向量,用于控制曲线在接近曲线的终点时的方向和形状。向量的位置在曲线的终点开始。

parameter 是介于 0 和 1 之间的浮点值,例如 linstep 函数返回的值。

在第二种格式中,参数和返回值在单维中工作。

示例 1

假设创建一个由原点处的一个粒子组成的名为 dust 的对象。若要控制该粒子在动画的前四秒中沿短的上弹曲线运动,可以编写以下运行时表达式:

dust.position = hermite(<<0,0,0>>,<<2,2,0>>,
<<3,0,0>>, <<0,3,0>>, linstep(0,4,time));

在播放动画时,粒子从起点 <0,0,0> 沿曲线移动到终点 <2,2,0>。切线向量 <3,0,0> 设置曲线在离开起点时的方向和形状。切线向量 <0,3,0> 在曲线接近终点时设置曲线的方向和形状。

在动画播放的零到四秒期间,粒子沿 linstep 函数定义的曲线移动。(有关详细信息,请参见 linstep。)

函数参数和对象的结果路径如下:

示例 2

假设您将上一个示例表达式的第三个参数更改为 <<6,0,0>>:

dust.position = hermite(<<0,0,0>>,<<2,2,0>>,
<<6,0,0>>, <<0,3,0>>, linstep(0,4,time));

由于 tan1 向量较长,因此路径曲线的坡度变陡:

示例 3

下面的表达式在 S 图案中移动灰尘:

dust.position = hermite(<<0,0,0>>,<<2,0,0>>,
<<0,3,0>>, <<0,3,0>>, linstep(0,4,time));

tan1 向量 <<0,3,0>> 将曲线的方向从起点设置为正 Y 轴方向。tan2 向量 <<0,3,0>> 在曲线接近终点时将曲线的方向设置为正 Y 方向。

将对起始和终点曲线之间的值插值以形成一个 S 图案。

示例 4

假设您将上一个示例表达式的第四个参数更改为 <<0,-3,0>>:

dust.position = hermite(<<0,0,0>>,<<2,0,0>>,
<<0,3,0>>, <<0,-3,0>>, linstep(0,4,time));

灰尘粒子在一个类似于半圆的图案中移动:

tan1 向量 <<0,3,0>> 将曲线的方向从起点设置为正 Y 轴方向。tan2 向量 <<0,-3,0>> 将曲线接近终点时曲线的方向设置为负 Y 方向。

示例 5

假设您将前一个示例表达式的第三个参数更改为 <<0,10,0>>:

dust.position = hermite(<<0,0,0>>,<<2,0,0>>,
<<0,10,0>>, <<0,-3,0>>, linstep(0,4,time));

由于 tan1 向量较长,因此路径曲线从起点上升时其坡度会变陡。因为 tan2 向量的 Y 幅值小于 tan1 向量的 Y 幅值,所以路径曲线在接近终点时其坡度会更加平坦。因为 tan1 的 Y 分量的幅值较大(为 10 而不是 3),所以曲线在 Y 方向的上升大于上一个示例。