假设我想构建一个三维立方体贝塞尔曲线,已知两个端点和两个控制点的方向(法向量)。如何选择两个控制点到各自端点的距离,使曲线尽可能“圆滑”?
“圆滑”的形式化定义是:最大化曲线中任意两条线段之间的最小角度。例如,具有端点(10,0,0)和(0,10,0)以及相应的法向量(0,1,0)和(1,0,0)应产生一个90°的圆弧。对于二维圆弧的特定情况,我找到了像这样的文章。但我没有找到更一般情况下的解决方案。
这是一个美学问题,如果真正的解决方案未知或过于复杂,我将接受合理的近似值。我的当前近似值过于简单:为两个端点之间距离的一半选择相同的控制点距离。数学更熟悉的人可能能够想出更好的方法。
(附注:这是为开源软件而做的,我很乐意在GitHub上给予荣誉。)
编辑:这里有一些其他图像来说明3D情况(jsfiddle):
“圆滑”的形式化定义是:最大化曲线中任意两条线段之间的最小角度。例如,具有端点(10,0,0)和(0,10,0)以及相应的法向量(0,1,0)和(1,0,0)应产生一个90°的圆弧。对于二维圆弧的特定情况,我找到了像这样的文章。但我没有找到更一般情况下的解决方案。
这是一个美学问题,如果真正的解决方案未知或过于复杂,我将接受合理的近似值。我的当前近似值过于简单:为两个端点之间距离的一半选择相同的控制点距离。数学更熟悉的人可能能够想出更好的方法。
(附注:这是为开源软件而做的,我很乐意在GitHub上给予荣誉。)
编辑:这里有一些其他图像来说明3D情况(jsfiddle):
编辑2:这是一个不稳定版本的ApiNATOMY的截图,让您了解我正在尝试做什么。我正在创建3D管道来代表血管,连接解剖图的不同部分:
(They won't let me put in a jsfiddle link if I don't include code...)