我想找到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。
我的基本问题是两个部分:
结果告诉我什么。他们是什么意思。
如何使用这些结果来计算此时的半径。
答案 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(),因为第三个导数向量在计算曲率半径时没有用。