bezier曲线平滑算法研究

 bezier曲线平滑算法研究

一、Bezier曲线定义:
给定n+1个控制顶点Pi(i=0~n) ,则Bezier曲线定义为:
P(t)=∑Bi,n(t)Pi u∈[0,1]
其中:Bi,n(t)称为基函数。
Bi,n(t)=Ci nti (1-t)n-i
Ci n=n!/(i!*(n-i)!)

二、Bezier曲线性质
1、端点性质:
a)P(0)=P0, P(1)=Pn, 即:曲线过二端点。
b)P’(0)=n(P1-P0), P’(1)=n(Pn-Pn-1)
即:在二端点与控制多边形相切。
2、凸包性:Bezier曲线完成落在控制多边形的凸包内。
3、对称性:由Pi与Pn-i组成的曲线,位置一致,方向相反。
4、包络性:Pn (t)=(1-t)Pn-1 (t)+tPn-1 (t)

 

编程语言 C++

#include<stdio.h>

void Bezier(int x1,int y1,int z1,int x2,int y2,int z2,int x3,int y3,int z3,int x4,int y4,int z4,float u)
{ double a[4][4],b[4][4],c[4][4];
a[0][0]=x1;
b[0][0]=y1;
c[0][0]=z1;
a[0][1]=x2;
b[0][1]=y2;
c[0][1]=z2;
a[0][2]=x3;
b[0][2]=y3;
c[0][2]=z3;
a[0][3]=x4;
b[0][3]=y4;
c[0][3]=z4;
for(int i=1;i<=3;i++)
for(int j=0;j<4-i;j++)
{
a[i][j]=(1-u)*a[i-1][j]+u*a[i-1][j+1];
b[i][j]=(1-u)*b[i-1][j]+u*b[i-1][j+1];
c[i][j]=(1-u)*c[i-1][j]+u*c[i-1][j+1];
}
printf("%10lf%10lf%10lf/n",a[3][0],b[3][0],c[3][0]);
}


void main(){
int x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4;float u;
printf("输入Bezier曲线第控制顶点/n");
scanf("%d%d%d%d%d%d%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2,&x3,&y3,&z3,&x4,&y4,&z4);
for(;;){
fflush(stdin);
printf("输入u=");
scanf("%f",&u);
Bezier(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,u);
}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值