- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基本图形的生成与显示
计算机图形学基础(2) By: 陈莉 第2章基本图形的生成与显示 图形扫描转换:(光栅化) 确定最佳接近图形的像素集合,并用指定属性写像素的过程。 第2章基本图形的生成与显示 区域填充: 二维图形的光栅化必须确定区域对应的像素集,并用指定的属性或图案显示它。 2.1 直线的生成 点绘制: 对于CRT来说就是在指定的屏幕位置上开启电子束,使该位置上有荧光点发光。 2.1 直线的生成 数学上,理想的直线是由无数个点构成的集合,没有宽度。计算机绘制的直线是在显示器所给定的有限个像素组成的矩阵中,确定最佳逼近该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作,实现显示器绘制直线。 2.1 直线的生成 通过计算沿线路径上两指定端点间的中间端点位置,可以绘制一条线段,输出设备则按指令在端点间的这些位置直接填充。 2.1 直线的生成 光栅扫描显示器,通过绘制两端点之间的离散的点来显示线段。线路径上的离散坐标位置是从线段算法中计算得来的。将线段的颜色装入对应于像素位置的帧缓存中。由视频控制器从帧缓存中读入该颜色值,然后显示在屏幕像素上。一般使用整数值表示屏幕位置,因此绘制的位置只能接近两指定端点间的实际线段位置。例如一条线段的位置是(10.48,20.51),转换成像素位置则是(10,21)。这样将坐标值取整使得显示的线段具有阶梯(锯齿)现象。 2.1 直线的生成 画一条直线,实质上是一个发现最佳逼近直线的像素序列,并填入色彩数据的过程。 DDA算法 中点画线法 Bresenham算法 2.1 直线的生成 假设像素位置按照扫描行数和列数来指定,下图给出了选址策略。扫描线从屏幕底部顺序编号(从零开始),像素列则沿每条扫描线从左至右顺序编号(从零开始)。 2.1 直线的生成 2.1.1数值微分法(DDA) (Digital Differential Analyzer)是一种基于直线的微积分方程来生成直线的方法。在一个坐标轴上以单位间隔对线段取样,从而确定另一个坐标轴上最靠近线路径的对应整数值。 数值微分法 直线的斜率截距方程为:y=k?x+b 给定线段的两个端点(X1,Y1)和(X2,Y2), 如下图: 数值微分法 则直线的斜率k为: 对于任何沿直线给定的x增量△x,由上式可计算出对应的y增量△y。 数值微分法(简单DDA法) 考虑具有正斜率的线段: 如果斜率小于等于1,则以单位x间隔(△x=1)取样,并逐个计算每一个y值: 由于k可以是0与1之间的任意实数,所以计算出的y值必须取整。 数值微分法 对于大于1的正斜率线段,则交换x和y的位置。也就是以单位y间隔(△y=1)取样,并逐个计算每一个连续的x值: 数值微分法 对于起始点在右侧的线段,若其正斜率小于1,可设置△x=-1,y值的方程为: 若正斜率大于1,设△y=-1,x值的方程为: 数值微分法 前面所讨论的公式也可用于负斜率的线段。 数值微分法 DDA方法是一种增量算法,在计算过程中,取整操作比较费时,且还包括除法运算。 例:设第一象限直线OE,起点为(0,0),终点坐标为(6,3)试用DDA法计算,并作出走步轨迹图。 数值微分法 例2:设第一象限直线OE,起点为(2,1),终点坐标为(12,9)试用DDA方法计算,并作出走步轨迹图。 数值微分法 练习:利用DDA算法绘制直线P1P2,其端点坐标为P1(0,0)P2(-3,5)。 数值微分法 #include math.h void CMyView::OnDdaline() { // TODO: Add your command handler code here CDC *pDC=GetDC(); int x0=100,y0=100,x1=300,y1=200,c=RGB(255,0,0); float dx,dy,x,y,k; dx=(float)(x1-x0),dy=(float)(y1-y0); k=dy/dx;//求出斜率 数值微分法 x=x0; y=y0; if(abs(k)1) { for (;x=x1;x++) {pDC-SetPixel(x,int(y+0.5),c); y=y+k; } } 数值微分法
您可能关注的文档
最近下载
- 荧光光谱仪使用及维护操作手册.docx VIP
- 年福特猛禽F150全车电路图.pdf
- 冶金过程传输现象知到课后答案智慧树章节测试答案2025年春苏州大学.docx VIP
- 潮州市农房设计通用图集.pptx
- 2025至2030中国宠物殡葬服务行业市场深度分析及发展前景与投资战略报告.docx VIP
- 2025四川眉山市国有资本投资运营集团有限公司招聘50人笔试备考试题及答案解析.docx VIP
- 花城版音乐四年级上册-《今夜是否感到恩爱》-课堂教学设计.pdf VIP
- 海康威视监控产品介绍.pptx VIP
- Empower3软件说明书(修订).pdf VIP
- 王受之世界现代的设计史.ppt VIP
原创力文档


文档评论(0)