沿样条曲线移动骨骼

Moving a bone along a spline curve

提问人:Zokhoi 提问时间:11/3/2023 最后编辑:SpektreZokhoi 更新时间:11/3/2023 访问量:54

问:

我有一条 B 样条曲线,我希望刚性骨骼沿着该曲线移动,并且我想计算移动另一端时骨骼一端的反向运动学。骨头的两端应位于曲线上,骨头的长度应保持一致。我有必要的函数将 B 样条曲线转换为其他参数曲线,如贝塞尔曲线。我应该如何解决这个问题?

示例方案:

初始花键与骨:

spline with bone

一段时间后,移动了骨骼的花键:

spline with bone moved

这些图像是通过手动移动点完成的,因此骨骼长度不一致。但是,对于计算结果,它应该是。

目前我正在研究的是首先将骨头的头部固定下来,然后以骨头长度的半径在头部中心画一个圆,并找到圆和样条之间的交点。我发现 T. W. Sederberg 的《计算机辅助几何设计》第 7.3 章描述了参数曲线和隐式曲线之间的交集,这似乎符合我的需求,但我不确定如何将其应用于我的问题,以及如何有效地求解多项式根。

上下文:我正在制作一个 2D 矢量动画引擎供我自己使用。前端是浏览器中的 JavaScript 和 html5 canvas,计算部分是用 Rust 编译成 WASM 完成的。

数学 图形 计算几何 样条曲线 逆运动学

评论

0赞 Robert Dodier 11/3/2023
在我看来,点 f(u) 和 f(v) 之间的距离是两个变量的函数,其中 f 是样条函数的参数化(即 f(u) 在 u 从某个起始值到某个结束值时跟踪样条),并且您希望遵循常数值的轮廓(常数是骨骼的长度)。也许你可以根据你的问题调整轮廓跟踪算法。
0赞 Simon Goater 11/3/2023
您可以使用类似二进制斩波的方法来查找 v,使得 |f(u) - f(v)|= 骨长。可能并不总是有解决方案,或者可能有多个解决方案,因此您必须决定如何处理。
0赞 Spektre 11/3/2023
第一点是你的运动参数在范围内的位置。第二点是可以在哪里拟合,例如这个近似搜索。为了简化搜索,您可以计算近似的 BEZIER 曲线长度并开始搜索周围的 dt,但近似搜索并不真正需要它......BEZIER(t)tt = <0,1>BEZIER(t+dt)dtdt=bone_length/BEZIER_length

答: 暂无答案