有理贝塞尔曲线

说明

文稿来自计算几何导论 https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES 的翻译。

有理贝塞尔曲线

有理贝塞尔曲线是NURBS曲线的特例。有理贝塞尔曲线由以下确定:
n + 1 n+1 n+1个控制点 P 0 , P 1 , . . . , P n P_0,P_1,...,P_n P0,P1,...,Pn,与控制点一一对应的权值 w i w_i wi,结点为0(重数为n+1)与1(重数为n+1)。
C ( u ) = ∑ i = 0 n R i , n ( u ) P i \mathbf{C}(u)=\sum_{i=0}^{n} R_{i, n}(u) \mathbf{P}_{i} C(u)=i=0nRi,n(u)Pi
其中基函数:
R i , n ( u ) = B n , i ( u ) w i ∑ j = 0 n B n , j ( u ) w j R_{i, n}(u)=\frac{B_{n, i}(u) w_{i}}{\sum_{j=0}^{n} B_{n, j}(u) w_{j}} Ri,n(u)=j=0nBn,j(u)wjBn,i(u)wi

圆锥曲线

由以前的讨论可以知道,贝塞尔曲线与B样条曲线只能表达抛物线等多项式曲线。有理曲线的引入,使得曲线也能够表达圆、椭圆、双曲线等。
(该部分的讨论 似乎建立在度为2的有理贝塞尔曲线就是圆锥曲线的基础上的)

五个条件可以唯一地确定一条圆锥曲线

我们知道,如下隐式曲线可以表达圆锥曲线,该隐式曲线由三个点 P 0 , P 1 , P 2 P_0,P_1,P_2 P0,P1,P2确定(曲线经过 P 0 , P 2 P_0,P_2 P0,P2且与 P 0 P 1 , P 2 P 1 P_0P_1,P_2P_1 P0P1,P2P1相切。
p ( x , y ) = a x 2 + 2 b x y + c y 2 + 2 d x + 2 e y + f = 0 p(x, y)=a x^{2}+2 b x y+c y^{2}+2 d x+2 e y+f=0 p(x,y)=ax2+2bxy+cy2+2dx+2ey+f=0
在这里插入图片描述
一个自然的想法是将该点选取再P1到P0P2中点的线段上,在该线段上移动该点能够生成不同的圆锥曲线。
在这里插入图片描述

由基函数出发

我们假设三个控制点P0,P1,P2的权值分别为1,w,1。2度贝塞尔曲线的基函数为:
B 2 , 0 ( u ) = ( 1 − u ) 2 B 2 , 1 ( u ) = 2 ( 1 − u ) u B 2 , 2 ( u ) = u 2 B_{2,0}(u)=(1-u)^{2}\\B_{2,1}(u)=2(1-u)u\\B_{2,2}(u)=u^{2} B2,0(u)=(1u)2B2,1(u)=2(1u)uB2,2(u)=u2
在这里插入图片描述
在这里插入图片描述
∣ M X ∣ / ∣ M P 1 ∣ = w / ( 1 + w ) |\mathbf{M X}|/|\mathbf{M P}_{1}|=w /(1+w) MX/MP1=w/(1+w)
如果w=1,有理贝塞尔曲线退化为贝塞尔曲线,曲线变成为抛物线。此时, X X X位于 M P 1 MP_1 MP1的中点。

那么如何判断有理贝塞尔曲线是椭圆还是双曲线。
在这里插入图片描述

在这里插入图片描述

结论

由三个非共线控制点 P 0 P_0 P0 P 1 P_1 P1 P 2 P_2 P2以及权重1, w w w和1定义的有理贝塞尔曲线是双曲线,抛物线或椭圆,如果w大于,等于或小于1。

圆弧与圆

最后,我们需要分别用有理贝塞尔曲线和NURBS曲线表示圆弧与圆。

圆弧

因为圆是特殊的椭圆,那么圆弧也是用2度有理贝塞尔曲线表示,且参数 w < 1 w<1 w<1
在这里插入图片描述
在这里插入图片描述
给定三个控制点 P 0 P_0 P0 P 1 P_1 P1 P 2 P_2 P2 P 0 P 1 = P 1 P 2 P_0P_1 = P_1P_2 P0P1=P1P2,且三个控制点对应的权重分别为 1 , s i n ( α ) , 1 1,sin(\alpha),1 1,sin(α),1,其中 α \alpha α是控制点 P 1 P_1 P1的半角,则有理贝塞尔曲线为一个圆弧。

两个示例

四分之一圆: P 1 P_1 P1处的角度为90度, α \alpha α为45度, w = s i n ( 45 ° ) w=sin(45°) w=sin(45°)
在这里插入图片描述
三分之一圆:控制三角形为等边三角形,即 α \alpha α 60 ° 60° 60° w = 0.5 w=0.5 w=0.5
在这里插入图片描述

完整圆

采用三个三分之一圆拼接成完整圆:
在这里插入图片描述
明显,控制点共7个, n = 6 n=6 n=6;度 p = 2 p=2 p=2
那么 m = n + p + 1 = 9 m=n+p+1=9 m=n+p+1=9,共10个结点,首尾结点为了保证钳制各需要3个结点,即 u 0 = u 1 = u 2 = 0 u0 = u1 = u2 = 0 u0=u1=u2=0 u 7 = u 8 = u 9 = 1 u7 = u8 = u9 = 1 u7=u8=u9=1。同时,为了保证曲线经过 P 2 P2 P2 P 4 P4 P4,两个控制点处的结点重数应为p,即 u 3 = u 4 = 1 / 3 u3=u4=1/3 u3=u4=1/3, u 5 = u 6 = 2 / 3 u5=u6=2/3 u5=u6=2/3

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值