当前位置:文档之家› Bezier曲线的生成算法参考代码

Bezier曲线的生成算法参考代码

1、利用Bezier曲线的生成算法实现二次Bezier曲线的生成(算法的详细原理见教材)。
void CBezie
// TODO: Add your command handler code here
CDC*pDC=GetDC();//得到绘图类指针
RedrawWindow();//重绘窗口
实现Bezier曲线的生成算法
实验步骤
(一)生成绘图应用程序的框架(如下图)
具体实现见第一次实验,过程不再详细说明。
(二)在应用程序中增加菜单
完成相关菜单的设计,具体的效果如下图所示,并设置好相关菜单消息的映射,具体的实现在前面的实验中介绍过,再此不在详细说明。
(三)在绘图函数中添加代码
通过以上步骤,得到了与菜单对应的消息映射,就可以在函数中添加代码绘制图形了。
float x0=50,y0=50,x1=150,y1=150,x2=300,y2=130,x3=350,y3=50;
float i,x,y,dt,t,n=30.0;
dt=1/n;
for(i=0;i<=n;i++)
{
t=i*dt;
x=x0*(1-t)*(1-t)*(1-t)+x1*3*t*(1-t)*(1-t)+x2*3*t*t*(1-t)+x3*t*t*t;
{
// TODO: Add your command handler code here
CDC*pDC=GetDC();//得到绘图类指针
RedrawWindow();//重绘窗口
CPen redpen(PS_SOLID,2,RGB(255,0,0));//创建画实线、线宽为2的红色画笔
CPen *old=pDC->SelectObject(&redpen);
CPen bluepen(PS_SOLID,2,RGB(0,0,255));//创建画实线、线宽为2的蓝色画笔
CPen *old=pDC->SelectObject(&bluepen);
float x0=100,y0=100,x1=200,y1=50,x2=150,y2=250;
float i,x,y,dt,t,n=30.0;
pDC->LineTo(x3,y3);
pDC->SelectObject(old);
ReleaseDC(pDC);
}
由以上代码绘出的图形如下:
y=y0*(1-t)*(1-t)*(1-t)+y1*3*t*(1-t)*(1-t)+y2*3*t*t*(1-t)+y3*t*t*t;
if(i==0)pDC->MoveTo(x,y);
pDC->LineTo(x,y);
}
pDC->MoveTo(x0,y0);
pDC->LineTo(x1,y1);
pDC->LineTo(x2,y2);
dt=1/n;
for(i=0;i<=n;i++)
{
t=i*dt;
x=x0*(1-t)*(1-t)+x1*2*t*(1-t)+x2*t*t;
y=y0*(1-t)*(1-t)+y1*2*t*(1-t)+y2*t*t;
if(i==0)pDC->MoveTo(x,y);
pDC->LineTo(x,y);
}
pDC->MoveTo(x0,y0);
pDC->LineTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->SelectObject(old);
ReleaseDC(pDC);
}
由以上代码绘出的图形如下:
2、利用Bezier曲线的生成算法实现二次Bezier曲线的生成(算法的详细原理见教材)。。
void CBezierView::OnBezier3()
相关主题