这是我第一次在这里发帖,所以我希望这没问题。我正在研究一个java项目,但我的问题实际上是关于我将用于它的数学......
我在 (x1, y1)、(x2, y2) 和 (x3, y3) 有三个(不同的)点。我所需要的只是它们之间形成的三次样条长度的公式。对于擅长微积分的人来说,这应该很容易推导出来。我在网上四处寻找,但似乎找不到解决方案。同样,我什至不需要样条曲线的方程——只要它的长度,给定三个点。提前致谢!如果有人能解决这个问题并分享,你会很开心:)
我有一些坏消息。
首先是三次b样条一般需要4个点来定义。可以从 3 个点中定义一个,但通常需要以某种方式组成另一个点(例如,使用仰角)。因此,我们需要了解您如何准确地定义样条曲线 - 如果它是某种其他类型的样条曲线(catmull-rohm?),或者您如何构建它的详细信息。
第二个是对于 b 样条,甚至是贝塞尔曲线的长度没有封闭形式的方程。我通常做的是在很多点对曲线进行采样,然后计算折线的长度。
有一些公式可以根据曲线的导数告诉你你的误差范围是多少,还有一些方法可以使用弧而不是线段来近似,但这些方法可能比它们的价值更复杂。
有关更多信息,请参阅贝塞尔曲线入门。然而,遗憾的是,tfinniga 对于三次样条曲线是正确的,您需要使用近似值。