我有一个catmull曲线定义了几个控制点,如下所示:

我想动画一个物体沿着曲线移动,但能够定义物体的速度。
当使用getPoint方法迭代曲线上的点时,对象会移动坐标(在图像中,在u=0,我们在p1,在u=0.25,在p2等等)。利用getPointAt方法,物体沿曲线以匀速运动。
然而,我想要做的是对动画有更大的控制,这样我就可以指定从p1到p2的移动应该是0.5,从p2到p3,0.3,以及从p3到p4 0.2。这个是可能的吗?
发布于 2019-03-26 10:33:34
谢谢你的建议。我最终实现这一点的方式是在我的时间变量( three.js getPoint函数的u变量)之间创建一个自定义映射。
我使用一个名为四硼酸的javascript库创建了一个分段线性函数。这样我就能把它映射到你身上,这样:
发布于 2019-03-21 10:01:04
然而,我想要做的是对动画有更大的控制,这样我就可以指定从p1到p2的移动应该是0.5,从p2到p3,0.3,以及从p3到p4 0.2。这个是可能的吗?
您可以通过使用像tween.js这样的动画库来实现这一点。通过这种方式,您可以指定对象的开始和结束位置以及所需的持续时间。还可以使用宽松功能自定义转换类型。
发布于 2019-03-21 16:18:45
您有多个选项,我将描述理论,然后是一个可能的实现。
理论
你想arclength参数化你的曲线。这意味着参数的增量1会导致沿着1的曲线移动的距离。
这种参数化将允许您完全控制您的对象的运动以任何你想要的速度,不管它不是线性的,非线性的,分段的…
可能的应用
有许多数值积分技术,可以让你把曲线参数化。
一种可能的方法是预先计算这些值并将它们放在一个表上。选择一个小的epsilon,从第一个参数值x_0开始,在x_0,x_0+ epsilon,x_0+2*epsilon,x_0+2*epsilon,
在这样做时,取每个样本之间的线性距离,并将其添加到累加器中。即travelled_distance +=长度(samplex,samplex+1)。
把这对放在桌子上。
现在,当你在x,想移动y单位时,你可以把x圈到最近的x_n,线性地寻找第一个x_n值,它的距离大于y,然后返回那个x_n。
这个算法不是最有效的,但它很容易理解和编码,所以至少可以让您开始。
如果您需要一个更优化的版本,寻找弧长度参数化算法。
https://stackoverflow.com/questions/55269825
复制相似问题