1、创建工程名为“Bezier 曲线的绘制”的单文档应用程序,具体操作可参考前面的例子
2、编辑菜单资源并添加消息处理函数 OnBezier
3、添加程序代码。在“Bezier 曲线的绘制 View.cpp 中适当位置添加以下代码”
// CBezierView message handlers
#define T 20
float BEN[4][4]={-1,3,-3,1, 3,-6,3,0, -3,3,0,0, 1,0,0,0};
float point[4][3] ={100,100,1,200,300,1,400,300,1,300,100,1}; //给定控制点
void bezier(CDC*pDC,int n, int t, float p[4][3]);
void matx44(float a[4][4],float b[4][3],float c[4][3]);
void matx14(float a[4],float b[4][3], float c[3]);
void bezier (CDC*pDC,int n,int t, float point[4][3]) //绘制 Bezier 曲线
{
float cc[4][3];
float pp[3];
int i,xx,yy,a,b;
float u[4];
u[3]=1.0;
a=point[0][0],b=point[0][1]; 第一个控制点的横、纵坐标
for(i=2;i<=T;i++){
u[2]=(1.0/T)*i;
u[1]=u[2]*u[2];
u[0]=u[2]*u[2]*u[2];
matx44(BEN,point,cc);
matx14(u,cc,pp); xx=pp[0],yy=pp[1];
pDC->MoveTo(a,b); pDC->LineTo(xx,yy);
a=xx; b=yy;
}
}
void matx44(float a[4][4],float b[4][3],float c[4][3])
{
int i,j,m;
for(i=0;i<4;i++)
for(j=0;j<3;j++) c[i][j]=0.0; //初始化中间矩阵
for(m=0;m<4;m++)
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[m][i]+=a[m][j]*b[j][i];
return;
}
评论2