如何计算C2连续的双三次Bezier曲面片的内部控制点

5

我正在尝试计算平滑连接管道的双三次贝塞尔曲面的控制点。以下是在OpenSCAD语法中对应于一个贝塞尔补丁的16个控制点:

[[[ 2 ,  2 , 0], [2.5, 1.5, 0], [3.5,  1 , 0], [4,  1 , 0]],
 [[ 2 ,  2 , 1], [2.5, 1.5, 1], [3.5,  1 , 1], [4,  1 , 1]],
 [[1.3, 1.3, 2], [1.8,  0 , 2], [ 3 , 0.5, 2], [4, 0.5, 2]],
 [[ 0 ,  0 , 2], [1.8,  0 , 2], [ 3 ,  0 , 2], [4,  0 , 2]]]

给定了角点;沿边缘计算出具有明显方向的正切线的控制点(显示为红色): Bezier patch with control points and some normal vectors 可以在平面z=0,y=0,x=4和x=y上镜像该补丁以生成更大的组合表面,在所有四个接缝处都是C1连续的。该表面在平面z=0,y=0和x=4中的接缝处也是C2连续的,但在平面x=y的接缝处不是这样(请参见V形黄色法向量):

Bezier patch with control points (red) and normals (yellow) - mirrored four times

为了实现所需的C2连续性,沿着有问题的接缝的表面法线应共面于平面x=y。
是否有可能设置四个内部控制点,使得所有接缝处的法线都如期望的那样?
如果可以,应通过什么公式或算法计算内部控制点,以允许完全C2连续的组合表面?
如果不行,生成所需的补丁的适当方法是什么?

你能同时展示出你定义的曲线吗?虽然纹理映射的图形很漂亮,但是不清楚在这个形状中你的原始坐标和它们明确定义的曲线在哪里。 - Mike 'Pomax' Kamermans
定义曲线是补丁的边缘,没有镜像(作为新图像添加)。这些曲线由给定矩阵的边缘定义为Bezier曲线。 K00 = [0,0,2]和K30 = [2,2,0]表示该补丁的右上角和右下角。通过适当选择当前为[1.8,0,2]的K21,可以固定从K00到K30沿边的法线吗?或者可以通过适当修改所有内部控制点K11、K12、K21和K22来修复法线吗? - Barvarian
1个回答

0

为了使两条贝塞尔曲线的连接连续平滑,连接处的三个点必须对齐(如草图中所示的黄色部分)。这是因为在曲线的端点处,曲线始终与由最后两个点构成的线段相切。

1

同样的原则也可以应用于草图底部的贝塞尔曲面(也是黄色的)。我认为没有更少限制性的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接