使用geomdl / nurbs查找bspline上某点的半径(或曲率)

时间:2019-06-13 18:39:31

标签: bspline nurbs

我想找到3D b样条曲线上给定点的曲率。 我相信我想使用该点的样条导数来计算该点的曲率,但我不知道如何。

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

我需要找到沿这条曲线的各个点的半径。从我的Google搜索中,我认为我想使用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。

我的基本问题是两个部分:

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

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

1 个答案:

答案 0 :(得分:1)

可以将曲线的曲率半径计算为| C'| ^ 3 / | C'XC“ |,其中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(),因为第三个导数向量在计算曲率半径时没有用。