实验题目:实验四 自由曲线绘制算法
1. 实验目的:
掌握曲线的表示形式、曲线的连续性条件、拟合和逼近的基本概念
掌握Bezier曲线的性质
编程实现Bezier曲线生成算法
2. 实验描述:
绘制三次Bezier曲线,可以采用公式法或德卡斯特里奥(De Casteliau)算法绘制
3. 算法设计:
当n=3时,Bezier曲线的控制多边形有四个控制点P0、P1、P2和P3,Bezier曲线是三次多项式。 p(t) 3 PBi
i 0i,3(t) (1 t) P0 3t(1 t) P1 3t(1-t) P2 t P3 3223
3232323 ( t 3t-3t 1)P0 (3t 6t 3t)P1 ( 3t 3t) P2 tP3
其中:B0,3(t),B1,3(t),B2,3(t),B3,3(t)称为基函数。
4. 源程序:
//1)TestView.h
class CTestView : public CView
{
…….
protected:
bool Flag;//标志
CPoint *pt;//顶点
int CtrlPoint;//控制多边形顶点
} ……..
2) //TestView.cpp
#include "math.h"//数学头文件
#define N_MAX_POINT 10//控制多边形的最大顶点数
#define ROUND(a) int(a+0.5) //四舍五入
。。。。。。
CTestView::CTestView()
{
}
void CTestView::OnMENUBezierCurve()
{
// TODO: Add your command handler code here RedrawWindow(); AfxGetMainWnd()->SetWindowText("三次Bezier曲线");//显示标题 MessageBox("单击左键绘制控制多边形,单击右键绘制曲线","提示",MB_OK); Flag=false;