- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学期末编程大作业
完成下列程序的设计、调试与及设计说明书:
实现直线、圆的生成
要求:(1)算法不限;(2)直线的端点、圆的圆心、半径由用户实时输入;(3)用所实现的直线、圆的生成程序实现一个任意图形的绘制。
实现区域填充(多边形区域)或影线填充
要求:(1)区域自行指定,至少应有一个内环(2)算法:计算机相关专业的要求实现图案填充,机械相关专业的要求实现影线填充。
直线段裁剪算法的实现
要求:完成对一个指定图形(见图)的裁剪,先在图形区显示原始图形及窗口位置,然后将裁剪后图形的显示在图形区的另一侧。
凸多面体消隐的实现(外法线法)
要求:立体数据自定。
样条曲线的实现
要求:实现B样条曲线,并能通过交互输入点的形式完成曲线绘制。
注意:要反求控制点
平时成绩(30分)
要求:
1、语言不限,可以是所熟悉的如何一种语言。
2、须提交的内容包括:源程序(电子版)、可执行程序,设计说明书(电子版及打印版)。
3、程序须经教师运行测试通过。
4、设计说明书B5页面打印,内容包括:算法与数据结构,程序流程说明及变量,程序运行情况分析及结果截图,程序使用说明。
题目一:实现直线、圆的生成
要求:(1)算法不限;(2)直线的端点、圆的圆心、半径由用户实时输入;(3)用所实现的直线、圆的生成程序实现一个任意图形的绘制。
程序使用说明.
1)概述
该程序以Visual C++6.0作为编程开发工具,利用其中的MFC(Microsoft Foundation Classes)库作为应用程序的框架,进行图形的编程绘制,有良好的用户操作界面和简洁的操作方法。
执行该程序,界面如下图。
图1-1 程序运行界面
图形绘制功能的实现,主要是通过点选菜单栏中的对应菜单项来实现。主要功能有:图形颜色的选择、绘制直线、绘制圆。
2)具体操作说明:
a.颜色的选择.
鼠标左键单击菜单项,便会弹出颜色编辑对话框,如图2。
图1-2 颜色编辑对话框
可以通过鼠标左键点选对话框中的颜色实例,或者是自行编辑颜色值,来确定用户想要生成图形的颜色。下面的绘图过程,我们以黑色为例。
b.直线的绘制
图1-3 直线参数对话框
鼠标左键点选菜单栏中的菜单,会弹出下拉菜单,其中提供2种直线绘制的经典算法,包括DDA算法和Bresenham算法。我们可随意选择一种,例如Bresenham算法。
说表左键单击选定后,便会弹出参数输入对话框,如图3。
注意:由于在计算机的图形显示时,屏幕坐标默认以屏幕左上角点为(0,0)点,X轴方向水平指向右侧,Y轴方向竖直指向下侧。与我们实际中熟悉的坐标系不同,输入点坐标时要注意。例如直线的起止点坐标分别为(0,0)、(100,100),绘制结果如图5。
图1-5 绘制结果
如果输入的坐标值超出了设定的范围,将弹出提示对话框,如下图所示:
c.圆的绘制
鼠标左键点选菜单栏中的菜单,会弹出下拉菜单, Bresenham算法。
则弹出对话框如图5。
图1-5 圆参数输入界面
根据对话框的要求,填入元的基本参数值:圆心坐标值和半径值。
注意:界面上对输入的数值的要求。程序的默认窗体中,图形显示空间为宽度大小为700个像素值,高为428个像素值。全屏条件下,图形显示空间为宽度大小为1024个像素值,高为644个像素值。
我们选择圆心在(350,220)的位置,半径取200像素值。图形效果如下图6。
图1-6 圆形的绘制
程序算法说明.
1) 直线的绘制
a.数值微分法(Digital Differential Analyzer简称DDA)对任何沿直线给定的x的增量△x,可以从下式中计算出的增量△y:
同样,可以得出对应于指定的△y的增量△x:
对斜率绝对值k|1的线段,让x从起点到终点变化,每步递增(或递减)1△x=±1,△y=±k。若前一次的直线上像素点坐标(xi,i),这一次的直线上像素点坐标为i+1,yi+1),则xi+l=xi±,i+1=yi±k随后输出该像素的颜色值即可。
对于斜率绝对值k|1的线段,让从起点到终点变化,每步递增(或递减)1,计算对应的x增量,△x=±1k。若前一次的直线上像素点坐标为,),这+1,y+1),则=xi±1/k,+l=yi±1随后输出该像素的颜1965年,Bresenham提出了一种更好的直线生成算法,称为Bresenham算法。此算法的k在0~1之间的情况,从给定线段的左端点,y)开始,逐步处理每个(x位置),并在扫描线值最接近线段的像素上绘出一点。,R/)的八分之一圆周。取(0,R)为起点,按顺时针方向生成。从这段圆弧的任意一点出发,按顺时针方向生成圆时,为了最佳逼近
主要程序段
/**********DDA直线算法*************/
void CAView::OnDDALine()
{ // TODO: Add you
文档评论(0)