首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用自定义速度沿曲线移动物体

用自定义速度沿曲线移动物体
EN

Stack Overflow用户
提问于 2019-03-20 20:41:54
回答 3查看 484关注 0票数 1

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

我想动画一个物体沿着曲线移动,但能够定义物体的速度。

当使用getPoint方法迭代曲线上的点时,对象会移动坐标(在图像中,在u=0,我们在p1,在u=0.25,在p2等等)。利用getPointAt方法,物体沿曲线以匀速运动。

然而,我想要做的是对动画有更大的控制,这样我就可以指定从p1到p2的移动应该是0.5,从p2到p3,0.3,以及从p3到p4 0.2。这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-26 10:33:34

谢谢你的建议。我最终实现这一点的方式是在我的时间变量( three.js getPoint函数的u变量)之间创建一个自定义映射。

我使用一个名为四硼酸的javascript库创建了一个分段线性函数。这样我就能把它映射到你身上,这样:

  • 在t= 0,u=0时,产生p1
  • 在t= 0.5,u= 1/3时,导致p2
  • 在t= 0.8,u= 2/3时,导致p3
  • 在t= 1,u=1时,产生p4

T到U地图图片

票数 1
EN

Stack Overflow用户

发布于 2019-03-21 10:01:04

然而,我想要做的是对动画有更大的控制,这样我就可以指定从p1到p2的移动应该是0.5,从p2到p3,0.3,以及从p3到p4 0.2。这个是可能的吗?

您可以通过使用像tween.js这样的动画库来实现这一点。通过这种方式,您可以指定对象的开始和结束位置以及所需的持续时间。还可以使用宽松功能自定义转换类型。

票数 0
EN

Stack Overflow用户

发布于 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。

这个算法不是最有效的,但它很容易理解和编码,所以至少可以让您开始。

如果您需要一个更优化的版本,寻找弧长度参数化算法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55269825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档