教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

计算机图形学实验指导书(5)

来源:网络收集 时间:2026-08-08
导读: MoveTo()函数只是将当前位置移动到指定位置,它并没有画出直线,其函数说明为: BOOL CDC:: MoveTo (int X, int Y); 示例:在CVcAppView类中的OnDraw()函数中加入下列画点语句: //绘制直线 pDC->TextOut(20,60,\ p

MoveTo()函数只是将当前位置移动到指定位置,它并没有画出直线,其函数说明为:

BOOL CDC:: MoveTo (int X, int Y);

示例:在CVcAppView类中的OnDraw()函数中加入下列画点语句:

//绘制直线 pDC->TextOut(20,60,\ pDC->MoveTo(20,90); pDC->LineTo(160,90);

Polyline()函数用来画一条折线,而PolyPolyline()函数则用来画多条折线,它们的函数原型说明如下:

BOOL CDC::Polyline(COUST POINT *lppt, int cPoints); BOOL CDC::PolyPolyline(COUST POINT * lppt, COUST DWORD *lpdwPolyPoints, DWORD cCount); 在Polyline()函数中,lppt是指向折线顶点数组的指针,而cPoints是折线顶点数组中的顶点数。例如,绘制一条具有4个顶点的折线,程序如下:

POINT polylinepoint[4]={{70,240},{20,190},{70,190},{20,240}}; pDC->Polyline(polylinepoint,4);

在PolyPolyline()函数中,lppt是指向保存顶点数组的指针,而各条折线的顶点数则保存在lpdwPolyPoints参数所指向的数组中,最后的cCount参数指定折线的数目。例如:

POINT polypolylinePt[9]={{95,160},{120,185},{120,250},{145,160},{120,185},

{90,185},{150,185},{80,210},{160,210}};

DWORD dwPolyPoints[4]={3,2,2,2}; //分四段折线,分别占用3,2,2,2个顶点

-- 9

pDC->PolyPolyline(polypolylinePt, dwPolyPoints, 4);

注:由于一条折线至少需要2个顶点,因此dwPolyPoints数组中的数不应该小于2。

(3)画弧线和曲线

通过Arc()函数画弧线或整个椭圆。椭圆限定在一个矩形内,称为外接矩形。Arc()函数的圆形说明如下:

BOOL CDC:: Arc(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc); 其中,(nLeftRect, nTopRect)是外接矩形的左上角坐标值,(nRightRect, nBottomRect)是外接矩形的右下角坐标值。而椭圆中心与点(nXStartArc, nYStartArc)所构成的射线与椭圆的交点成为弧线的起点,椭圆中心与点(nXEndArc, nYEndArc)所构成的射线与椭圆的交点成为弧线的终点。椭圆上从始点到终点就形成一条弧线。

在Windows系统中,弧线从始点到终点的方向是逆时针方向,但可以通过SetArcDirection()函数将绘制弧线方向设置为顺时针方向。

示例,用Arc()绘制圆、圆弧和椭圆,程序如下: for (i=1;i<6;i++) {

pDC->Arc(260-5*i,70-5*i,260+5*i,70+5*i,0,0,0,0); }

for (i=3;i<6;i++) {

pDC->Arc(260-10*i, 70-10*i, 260+10*i, 70+10*i,

(int)260+10*i*cos(60*3.1415926/180), (int)70+10*i*sin(60*3.1415926/180), (int)260+10*i*cos(60*3.1415926/180), (int)70-10*i*sin(60*3.1415926/180));

pDC->Arc(260-10*i, 70-10*i, 260+10*i, 70+10*i,

(int)260-10*i*cos(60*3.1415926/180), (int)70-10*i*sin(60*3.1415926/180), (int)260-10*i*cos(60*3.1415926/180), (int)70+10*i*sin(60*3.1415926/180));

}

Bezier曲线是最常见的非规则曲线之一。Bezier曲线属于三次曲线,需要四个控制顶点来确定一条Bezier曲线,其中曲线通过第一点和最后一点,并且第一条边和最后一条边是曲线在起点和终点处的切线,从而确定了曲线的走向。PolyBezier()函数可以画出一条或多条Bezier曲线,其函数原型说明如下:

BOOL CDC:: PolyBezier(CONST POINT * lppt, DWORD cPoints);

-- 10

其中,lppt参数是曲线控制顶点所组成的数组,cPoints参数表示lppt数组中的顶点数,一条Bezier曲线需要四个控制顶点。如果lppt数组用于画多条Bezier曲线,第二条以后的曲线只需要三个控制顶点,因为后面的曲线总是把前一条曲线的终点作为自己的起点。

示例,给出四个控制顶点,画出一条Bezier曲线和特征多边形。 //绘制Bezier 曲线

POINT polyBezier[4]={{20,310},{60,240},{120,300},{160,230}}; pDC->Polyline(polyBezier,4); pDC->PolyBezier(polyBezier,4);

(4)画封闭曲线

Windows中提供了一组画封闭曲线的函数,包括绘制矩形、多边性、椭圆等,这些画封闭曲线的函数不但可以利用画笔来画出轮廓线,同时还可以利用画刷来填充这些封闭曲线所围成的区域。

Rectangle()函数用来画矩形,其函数原型说明如下: BOOL CDC:: Rectangle(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);

其中,参数nLeftRect和 nTopRect给出了矩形左上角的坐标,而nRightRect和 nBottomRect则给出矩形的右下角坐标。

Ellipse()函数的作用则是画椭圆形。在Ellipse()函数中,椭圆是由其外接矩形来确定的,外接矩形的中心与椭圆中心重合,矩形的长与宽和椭圆的长短轴相等。函数说明如下:

BOOL CDC:: Ellipse(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);

其中的参数说明与Rectangle()函数相同。

RoundRect()函数用来画圆角矩形,其函数的原型说明如下: BOOL CDC:: RoundRect(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight);

其中的前四个参数与Rectangle()函数相同,nWidth表示圆角的宽度, nHeight表示圆角的高度。

Polygon()函数用来画封闭的任意多边形,其函数原型说明如下: BOOL CDC:: Polygon((COUST POINT *lpPoints, int cCount);

其中的参数说明与Polyline()函数相同。但两个函数有区别,Polygon()函数会自动将起

-- 11

…… 此处隐藏:1494字,全部文档内容请下载后查看。喜欢就下载吧 ……
计算机图形学实验指导书(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/564065.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)