文档介绍:曲线和曲面
第一节 Hermite多项式
三次Hermite多项式
Hermite多项式是非常有用的曲线形式。三次Hermite多项式就是一类常用的曲线,因为它们提供了对形状的局部控制,并且提供了C1连续性。若给定参数方程f(t)在起点和终点的位置、和一阶导数、,则可以利用下式构造一个三次Hermite多项式:
(1)
式中式(t)就是对于函数f(t)的Hermite插值多项式,矩阵H称为Hermite矩阵
绘制三次Hermite曲线,用户必须指定位置和导数,所以必须提供针对导数的特别界面。一种方式是通过用户通过鼠标确定曲线的起点和终点的位置,并给出起点和终点的导数,即可给出三次Hermite多项式所需的插值信息。
Hermite曲线绘制的程序设计
根据给出的三次Hermite多项式,利用逐点绘制的方法即可实现三次Hermite多项式的绘制。
程序“Hermite”的设计步骤如下:
创建工程名称为“Hermite”单文档应用程序框架。
添加消息处理函数。
利用ClassWizard(类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CHermiteView,根据表 1建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。
表 1 菜单项的消息处理函数
标示符ID
消息
消息处理函数
CHermiteView
WM_LBUTTONDOWN
OnLButtonDown(UINT nFlags, CPoint point);
CHermiteView
WM_LBUTTONUP
OnLButtonUp(UINT nFlags, CPoint point);
CHermiteView
WM_MOUSEMOVE
OnMouseMove(UINT nFlags, CPoint point);
添加函数。
在工程中添加应用函数的方法,,。
// : interface of the CHermiteView class
//
/////////////////////////////////////////////////////////////////////////////
const int N=3;//N次Hermite曲线
const int npoints=50;//由npoints+1个点构成的折线逼近Hermite曲线
class Point//二维平面点Point类
{
public:
double x,y;//二维平面中的点坐标为双精度浮点小数
Point(){x=0;y=0;};//构造函数
Point(double _x,double _y){x=_x;y=_y;};//构造函数
Point(CPoint p){x=;y=;};//构造函数
inline Point operator =(Point p){x=;y=;return (*this);};//Point对象的赋值运算
inline Point operator =(CPoint p){x=;y=;return (*this);};//CPoint对象的赋值运算
inline Point operator +=(Point p){x+=;y+=;return (*this);};//重载+=运算
inline Point operator +=(CPoint p){x+=;y+=;return (*this);};//重载+=运算
inline Point operator -=(Point p){x-=;y-=;return (*this);};//重载-=运算
inline Point operator -=(CPoint p){x-=;y-=;return (*this);};//重载-=运算
inline Point operator *=(double s){x*=s;y*=s;return (*this);};//重载*=运算
inline Point operator /=(double s){x/=s;y/=s;return (*this);};//重载/=运算
inline Point operator +(Point p){Point t;=x+;=y+;return (t);};//重载+运算
inline