- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学实验1报告
计算机科学与通信工程学院
实验报告
课程 计算机图形学 实验题目 二维图形绘制 学生姓名 学号 专业班级 指导教师 日期
成绩评定表
评价内容 具体内容 权重 得分 论证分析 方案论证与综合分析的正确、合理性 20% 算法设计 算法描述的正确性与可读性 20% 编码实现 源代码正确性与可读性 30% 程序书写规范 标识符定义规范,程序风格规范 报告质量 报告清晰,提交准时 总 分 指导教师签名
二维图形的绘制
实验内容
(1)绘制金刚石图案
金刚石图案的成图规则是:把一个圆周等分成n份,然后每两点之间连线。当n取奇数时,该图案可一笔连续绘成,即用MoveTo函数确定一个当前点,然后连续用LineTo函数连点成线。请设计连线规则并编程实现。
(2)绘制魔术三角形
绘制下图所示的魔术三角形图案 ,采用三种可明显区分的颜色填充。
(3)绘制递归圆
应用递归的方法绘制如下所示的图案。
2. 实验环境
软硬件运行环境:Windows XP
开发工具:visual studio 2008
3. 问题分析
根据实验需求,需要在MFC环境中建立一个由“文件”、“绘图”和“帮助”这3个菜单项目组成的菜单,其中“文件”的子菜单为“退出”,完成退出应用程序的工作,“绘图”,的子菜单为“Diamond”,用于绘制金刚石图案等,“帮助”的子菜单为“关于”,用于显示开发人员信息;定义一个输人对话框类,提供个两个参数的输入界面。最后在客户区输出图案。
1.金刚石图案:为把一个半径为300的圆,等分绘制金刚石图案;设计该算法为避免直线段的重复连接,需设计一个二重循环,代表起点索引号的外层整型变量i从i=0循环到i=n-2,代表终点索引号的内层整型变量j从j=i+1循环到j=n-1。以(p[i].x,p[i].y)为起点,以(p[j].x,p[j].y)为终点依次连接各线段形成金刚石图案。
金刚石有两种画法:
(1)每隔两个顶点连线直至回到原起点,再将下一个点作为新的原起点。
(2)每个点与其余点都连线直至全部连玩,再将隔一个点之后的点作为新的原起点。
2.魔术三角形:
先绘制三角形图形,再随机在三个图形中填色。
3.递归圆:
先确定首个圆的中心点坐标和半径与其周围八个小圆的中心点坐标和半径,再根据递归的深度再算出递归后圆的半径,并计算出它们的圆中心点坐标。
设计一个二重循环,代表起点的外层循环从i=0循环到i=n-2,代表终点的内层循环从j=i+1循环到j=n-1。以p[i].x,p[i].y作为起点,以p[j].x,p[j].y作为终点绘制连接线。
4. 算法设计
//DiamondView.h
class CDiamondView : public CView
{ ……
public:
//参数输入和提示对话框
CDlgDiamond dlgDiamond;//金刚石绘制中的参数输入对话框
CDlgCircle dlgCircle;//递归圆绘制中的参数输入对话框
CDlgBezier dlgBezier;//Bezier曲线绘制中的参数输入对话框
CDlgB dlgB;//B样条曲线绘制中的参数输入对话框
CDlgHint dlgHint;//裁剪中的提示对话框
//用于裁剪时的裁剪窗口绘制的控制
BOOL IsCutting;
BOOL IsDrawing;
//裁剪窗口的左上角和右下角坐标
POINT RectP1;//左上角坐标
POINT RectP2;//右下角坐标
//绘图函数,需要实现
void DrawDiamond(int,int,int);//绘制金刚石
void DrawTriangle();//绘制魔术三角
void DrawRecursionCircle(int);//绘制递归圆
void Polaris();//北极星
void DrawBezier1(POINT p[4]);//已知点作为控制点绘制Bezier曲线
void DrawBezier2(POINT p[4]);//已知点作为曲线上的点绘制Bezier曲线
void DrawBCurve(POINT p[6]);//绘制B样条曲线
void Cut();//裁剪
…… };
//DiamondView.cpp
void CDiamondView::OnMenuDiamond()
{ IsCutting = FALSE;
if(dlgDiamond.DoModal()==IDOK)
DrawDiamond(dlgDiam
文档评论(0)