插值算法结
插值 插值的是通过已知数据点构建新数据点的过程。其目标是找到一个函数,该函数在给定的数据点处精确匹配这些点,然后用这个函数来估计未知点的值。插值函数会精确通过所有已知数据点,但可能会在数据点之间出现过度摆动(尤其是在使用高阶多项式插值时)。 1 插值方法 1.1 背景 考虑一组 点 (x,y)(x, y)(x,y), (x0,y0), (x1,y1), …, (xn,yn).(x_0,y_0),\:(x_1,y_1),\:\ldots,\:(x_n,y_n). (x0,y0),(x1,y1),…,(xn,yn). xxx-值被称为横坐标或节点。假设 yyy 值可由函数 fff计算得到,即 yi=f(xi)y_i=f(x_i) yi=f(xi) .zxwnbeokjkla{zoom: 50%;} 图1:三个横坐标 (x0,x1,x2)(x_0,x_1,x_2)(x0,x1,x2) 和两个可能的函数 f(x)f(x)f(x) 的插值多项式表达。对于给定的点,p(x)p(x)p(x) 可能并不是 函数f(x)f(x)f(x) (右图) 较好的拟合 多项式插值...
B样条曲线
B 样条曲线 1 B样条曲线的由来 假设我们要设计一个花瓶的剖面,下图是一个111111阶的BeˊzierBézierBeˊzier曲线,如果想要让花瓶的"颈部"向着线段P4−P5P_4-P_5P4−P5的位置弯曲是比较困难的。 一种解决方法是,我们可以在这段颈部附近添加更多控制点以增加该区域的权重。但是,这将增加曲线的阶数。在许多情况下,使用这样高阶多项式是不值得的。 另一种方式是,我们可以将两个 BeˊzierBézierBeˊzier 曲线连接在一起。 只要第一条曲线的最后一段和第二条曲线的第一段方向相同,我们可以保证 G1G^1G1 连续性,即切点处朝两边的切向量具有相同的方向但可能长度不同(如果长度相同,则为 C1C^1C1 连续)。 下图展示了这种方式, 它由三个三阶BeˊzierBézierBeˊzier曲线连接而成,连接点用黄色矩形标记。 这说明,通过连接多个低阶 BeˊzierBézierBeˊzier曲线段,并满足G1G^1G1连续,我们仍然可以设计复杂的形状。 但是,要保持这种G1G^1G1连续条件可能很繁琐且不理想。 有没有...
贝塞尔曲线
Bezier曲线 贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线. 先从几个简单的例子开始: 一阶贝塞尔曲线 对于一阶贝塞尔曲线为我们可以看到是一条直线,通过几何知识,很容易根据t的值得出线段上那个点的坐标。 给定点 P0P_0P0、P1P_1P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出: B(t)=P0+(P1−P0)t=(1−t)P0+tP1,t∈[0,1]\mathbf{B}(t)=\mathbf{P}_0+(\mathbf{P}_1-\mathbf{P}_0)t=(1-t)\mathbf{P}_0+t\mathbf{P}_1,t\in[0,1] B(t)=P0+(P1−P0)t=(1−t)P0+tP1,t∈[0,1] 一阶曲线就是很好理解, 就是根据t来的线性插值。P0P_0P0表示的是一个向量 [x,y][x ,y][x,y], 其中xxx和...