使用geomdl / nurbs在bspline上的某个点处找到半径(或曲率)



我想在 3D b 样条上找到给定点的曲率。 我相信我想用那个点的样条的导数来计算那个点的曲率,但我不明白怎么做。

我在geomdl中定义了一个3D bspline(取自SolidWorks(它来自哪里不相关))。我可以使用 Curve.evaluate_single() 评估样条上的任何点。这似乎工作正常。我已经根据 SolidWorks 模型验证了返回的点,因此我假设我已经在 nurbs 中正确实现了 bspline。

我需要找到这条曲线上各个点的半径。从我的谷歌搜索中,我认为我想使用 Curve.derivatives() 来计算该点的瞬时曲率。但是我不明白如何将 Curve.derivatives() 的结果放入半径中。

下面是 Curve.derivatives(SomePointOnPath,4) 的结果:

[   [74.66019681782404, 131.77035668055586, 19.88498274391211],
[-2719.7097781710354, -598.8099790539873, -711.5032638750225],
[-5384.519486543373, 1273.8662545231637, 19431.220551950217],
[93757.48746982217, -22247.397114396095, 31343.52746776864],
[0.0, 0.0, 0.0]]

通过在这个点的两侧各取一小步,我计算出这个点的半径约为 409(求解给定 3 个点的圆的半径)

我不明白 Curve.derivatives() 的结果告诉我什么。 (第一个元组是点的坐标,超过这个坐标我就迷路了)

我预计这个特定点的半径约为 409。

我的基本问题分为两部分:

结果告诉我什么。它们是什么意思。

如何使用这些结果来计算此时的半径。

曲线的曲率半径可以计算为 |C'|^3/|C' X C"|其中 C' 和 C" 是一阶和二阶导数向量,X 是叉积运算符,|.|是矢量的大小。因此,您将需要该点的第一和第二导数来计算曲率半径。

Curve.derivatives(SomePointOnPath,4) 返回曲线的前 4 个导数,第 0 个导数是曲线上点的位置。因此,一阶导数为 [-2719.7097781710354, -598.8099790539873, -711.5032638750225],二阶导数为 [-5384.519486543373, 1273.8662545231637, 19431.220551950217]。 因此,我们可以使用这两个向量进行计算并获得曲率半径 408.9176414,它接近您的估计值 409。

附带说明一下,您可以简单地将"3"作为第二个参数传递给 Curve.derivatives(),因为第三个导数向量在曲率半径的计算中没有用处。

相关内容

  • 没有找到相关文章

最新更新