- 1、本文档共56页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[互联网]计算机图形徐教程曲线和曲面_01
曲线和曲面
第一节 Hermite多项式
1.1 三次Hermite多项式
Hermite多项式是非常有用的曲线形式。三次Hermite多项式就是一类常用的曲线,因为它们提供了对形状的局部控制,并且提供了C1连续性。若给定参数方程f(t)在起点和终点的位置、和一阶导数、,则可以利用下式构造一个三次Hermite多项式:
式中式(t)就是对于函数f(t)的Hermite插值多项式,矩阵H称为Hermite矩阵
绘制三次Hermite曲线,用户必须指定位置和导数,所以必须提供针对导数的特别界面。一种方式是通过用户通过鼠标确定曲线的起点和终点的位置,并给出起点和终点的导数,即可给出三次Hermite多项式所需的插值信息。
1.2 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);
添加函数。
在工程中添加应用函数的方法,这里先在HermiteView.h中声明需要使用的函数名称,然后再在HermiteView.cpp中定义此函数。
// HermiteView.h : 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=p.x;y=p.y;};//构造函数
inline Point operator =(Point p){x=p.x;y=p.y;return (*this);};//Point对象的赋值运算
inline Point operator =(CPoint p){x=p.x;y=p.y;return (*this);};//CPoint对象的赋值运算
inline Point operator +=(Point p){x+=p.x;y+=p.y;return (*this);};//重载+=运算
inline Point operator +=(CPoint p){x+=p.x;y+=p.y;return (*this);};//重载+=运算
inline Point operator -=(Point p){x-=p.x;y-=p.y;return (*this);};//重载-=运算
inline Point operator -=(CPoint p){x-=p.x;y-=p.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;t.x=x+p.x;t.y=y+p.y;return (t);};//重载+运算
inline Point operator +(CPoint p){Point t;t.x=x+p.x
文档评论(0)