Math 如何计算三维三次Bé上点的法线;zier曲线的起点和终点是否给定法线?

Math 如何计算三维三次Bé上点的法线;zier曲线的起点和终点是否给定法线?,math,geometry,bezier,polygons,Math,Geometry,Bezier,Polygons,我试图用一条三维三次贝塞尔曲线来描述一个“3D色带”(色带的宽度是恒定的)。第一个和最后一个控制点有一个与之相关联的法向量(始终垂直于这些点的切线,并描述这些点处功能区的曲面法向量),我正在尝试在曲线过程中平滑插值法向量 例如,给定一条形成字母“C”的曲线,第一个和最后一个控制点的曲面法线均朝上,功能区应从平坦开始,平行于地面,缓慢转动,然后再次平坦结束,朝向与第一个控制点相同的方向。要做到这一点“顺利”,它必须在曲线的中间朝外。目前(对于这种情况),我只能使所有的表面面向上(而不是在中间向外)

我试图用一条三维三次贝塞尔曲线来描述一个“3D色带”(色带的宽度是恒定的)。第一个和最后一个控制点有一个与之相关联的法向量(始终垂直于这些点的切线,并描述这些点处功能区的曲面法向量),我正在尝试在曲线过程中平滑插值法向量

例如,给定一条形成字母“C”的曲线,第一个和最后一个控制点的曲面法线均朝上,功能区应从平坦开始,平行于地面,缓慢转动,然后再次平坦结束,朝向与第一个控制点相同的方向。要做到这一点“顺利”,它必须在曲线的中间朝外。目前(对于这种情况),我只能使所有的表面面向上(而不是在中间向外),这在中间造成了一个丑陋的转变。 这很难解释,我在下面附上了这个例子的一些图片,上面有它当前的样子(所有表面朝上,中间有锐利的翻转)和它应该是什么样子(平滑过渡,表面慢慢旋转)。银色的脸代表正面,黑色的脸代表背面

不正确,它当前的样子是:

正确,它应该是什么样子:


我真正需要的是能够计算出3D三次bézier曲线上任意点的“混合法向量”,我可以生成多边形,没有问题,但我不知道如何让它们平滑地旋转,如图所示。完全不知道如何继续

您可以使用第一部分中介绍的算法,在t=0(或固定的t,以您选择的为准)时计算法线将为您提供平滑过渡

像这样:

(想象你沿着蓝红色边界的人行道)

编辑

好的,这是我通过另一种方式得到的:

程序很简单:

具有参数化功能:

f[t] := { x[t], y[t], z[t] }  
通过求导数计算切线向量:

f'[t] := { x'[t], y'[t], z'[t] }  
选择起点(和终点法向量),例如:

n[0] = {0, 0, 1};
现在将另一个函数定义为导数和法线的向量积:

cp[t_] := CrossProduct[f'[t], n[0]];  
就这样

我的四边形的要点在于:

 {f[t] - cp[t]/3, 
  f[t] + cp[t]/3, 
  f[t + dt] + cp[t + dt]/3, 
  f[t + dt] - cp[t + dt]/3}  
其中dt是您喜欢的增量

一种更复杂的方法可以解释曲线路径长度,但我想这是该算法的第二次迭代


这张图片似乎描述了我所追求的,但我很难理解所使用的方程式。具体来说,我主要只熟悉C类语言。。。“我想你不能再解释一点方程式了吗?”罗伯特:没问题,但我不想写一本书。这些是数学函数。如果你让我知道你的麻烦在哪里,我可以试着帮你!好吧,我有点理解你的数学函数——我对你的圆方程感到困惑。那么,我认为所提到的正交平面或多或少是我需要计算的,对吗?平面的表面法线(在某个位置t)是我要计算的同一个向量吗?我手头有贝齐尔方程的参数方程,并且计算了它们的导数来求切线,所以也许明天我不累的时候,我会尝试将它们付诸实践。同时,谢谢你的帮助@罗伯特:你写的都是对的。看来你的道路是对的。请注意,这些圆实际上给出了两个方程(带+/-Sqrt[]),蓝/红线在这些解之间,最好将其设置为参数,以便通过路径确定角度。@belisarius感谢到目前为止的所有帮助,但我仍然感到困惑。。。我已经看过这些方程了,但是我怎么计算圆方程呢?(使用一些绘图软件,我只能得到恰好被平面平分的球体。)在我得到圆的方程后,我如何计算我所追求的法线?供参考:和: