计算机图形学实验指导书(5)
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字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




