gpt4 book ai didi

python - 求三次 B 样条的长度

转载 作者:太空狗 更新时间:2023-10-29 21:35:46 26 4
gpt4 key购买 nike

使用 scipy 的 interpolate.splprep 函数在参数 u 上得到参数样条,但是 u 的定义域不是spline,它是输入坐标的分段线性连接。我试过 integrate.splint,但这只是给出了 u 上的单个积分。显然,我可以对一堆笛卡尔微分距离进行数值积分,但我想知道是否有闭合形式的方法来获取我忽略的样条曲线或样条曲线段的长度(使用 scipy 或 numpy)。

编辑:我正在寻找一种封闭形式的解决方案或一种非常快速的方法来收敛到机器精度的答案。我几乎放弃了数值求根方法,现在主要是在寻找一个封闭形式的答案。如果有人有任何集成椭圆函数的经验或能给我指出一个好的资源(Wolfram 除外),那就太好了。

我将尝试使用 Maxima 来获取不定积分,我认为这是样条函数的一部分:我将其交叉发布在 MathOverflow

最佳答案

因为 x 和 y 都是三次参数函数,所以就简单函数而言,不存在封闭解。数值积分是必经之路。积分弧长表达式或简单地添加线段长度 - 取决于您追求的精度以及您想要付出多少努力。

一种准确快速的“增加线段长度”的方法:

使用递归分割(de Casteljeau 算法的一种形式)生成点,可以用最少的点数提供高度准确的表示。仅在不符合标准时才分割分割。通常标准基于连接控制点(船体或笼)的长度。对于立方体,通常比较 P0P1+P1P2+P2P3 与 P0P3 的接近程度,其中 P0、P1、P2 和 P3 是定义贝塞尔曲线的控制点。

您可以在这里找到一些 Delphi 代码: link text

转换成Python应该比较容易。它将产生积分。代码已经计算了段的长度以测试标准。您可以简单地一路累加这些长度值。

关于python - 求三次 B 样条的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com