计算机图形学中的基本图形生成算法--中期检查自查表
实验一:基本图形生成算法实验说明

实验一基本图形生成一.实验学时4学时二.实验类型设计型实验三.实验目的和要求1、了解光栅化图形学的主要理论和知识。
2、了解VS的Windows窗口编程中几何图形的绘制调用接口。
3、掌握线段的生成算法原理和算法,掌握微分画线法、中点画线算法的原理,学会用C++程序进行算法的设计。
4、选作:掌握多边形填充算法的基本原理和方法,掌握有序边表法和扫描线种子填充算法的原理,采用C++进行算法的设计。
四、实验内容(一)完成一个图形生成算法的仿真环境,在一个窗口区域中画出坐标系和坐标网格,其中每个坐标网格模拟显示器上的一个像素点。
实验步骤如下:(1)在VS中打开实验的的工程。
(2)在工程中增加一个菜单项:打开linemenu.rc资源在下面增加一个多边形填充的选项。
操作界面图见图1所示。
图1 菜单资源图对新增的菜单选项设置ID值见图2所示。
图2 ID定义界面图(3)在resource.h文件中增加ID_FILL的定义图3 ID定义界面图(4)在circle.cpp文件中增加一个多边形填充的处理switch(message){case WM_COMMAND:hdc=GetDC(hwnd);if(LOWORD(wParam) == ID_BACK){hnewpen=CreatePen(PS_SOLID,1,RGB(0,255,255));holdpen=(HPEN)SelectObject(hdc,hnewpen);DrawBackground(hdc);hnewpen=CreatePen(PS_SOLID,2,RGB(0,0,0));holdpen=(HPEN)SelectObject(hdc,hnewpen);DrawAB(hdc);}else if(LOWORD(wParam)==ID_MID){hnewpen=CreatePen(PS_SOLID,2,RGB(255,0,0));holdpen=(HPEN)SelectObject(hdc,hnewpen);DDACircle(hdc,1,5,20,RGB(0,255,255));}else if(LOWORD(wParam) == ID_BRE){hnewpen=CreatePen(PS_SOLID,2,RGB(255,0,0));holdpen=(HPEN)SelectObject(hdc,hnewpen);p[0].SetX(0);p[0].SetY(0);p[1].SetX(5);p[1].SetY(8);p[2].SetX(1);p[2].SetY(10);p[3].SetX(0);p[3].SetY(0);ScanFill(hdc,p,RGB(0,255,255));}SelectObject(hdc,holdpen);DeleteObject(hnewpen);ReleaseDC(hwnd,hdc);break;(二)设计微分画线算法和中点画线算法程序,并进行调试。
计算机图形学-基本图形的生成与显示

y0 kx0 b 0
则: d 0 0.5 k
(x0+1,y0+0.5) (x0,y0)
中点算法的改进——整数化判别式
改进:用2dΔx代替d, 令D=2dΔx 则:
D0 2 xd 0 2 x (0.5 k ) x 2 y di 0 Di 0 Di +1 2 xd i 1 2 x ( d i 1 k ) 2 xd i 2 x 2 y Di 2 x 2 y di 0 Di 0
12
中点画线算法
直线与空间的关系
y F(x,y)=0 F(x,y)>0 x F(x,y)<0 F(x,y)=0 F(x,y)>0 y
F(x,y)<0
x
图3 直线将平面分为三个区域
13
假定0≤k≤1,即0≤Δy/Δx≤1,x是最大位移方向 当前点 P 的下一点只能取 Pu 或 Pd,可用中点与直线 的位置关系来判定,中点偏差判别式
中点偏差判别式的初始值 直线的起点坐标为P0(x0,y0),x为主位移方向。 因此,第一个中点是(x0+1,y0+0.5),相应 的d的初始值为:
d 0 F ( x0 1, y0 0.5) y0 0.5 k ( x0 1) b
y 0 kx0 b k 0.5
Pu(xi+1,yi+1) Q M(xi+1,yi+1/2) P(xi,yi) Pd(xi+1,yi)
图4 中点算法生成直线的原理
中点M坐标为(xi+1, yi+0.5), 判别式:
d F ( xM , yM ) F ( xi 1, yi 0.5) yi 0.5 k ( xi 1) b
计算机图形学实验报告

计算机图形学实验报告
在计算机图形学课程中,实验是不可或缺的一部分。
通过实验,我们可以更好地理解课程中所学的知识,并且在实践中掌握这些
知识。
在本次实验中,我学习了如何使用OpenGL绘制三维图形,并了解了一些基本的图形变换和视图变换。
首先,我们需要通过OpenGL的基本命令来绘制基本图形,例
如线段、矩形、圆等。
这些基本的绘制命令需要首先设置OpenGL 的状态,例如绘制颜色、线段宽度等,才能正确地绘制出所需的
图形。
然后,在实验中我们学习了图形的变换。
变换是指通过一定的
规则将图形的形状、位置、大小等进行改变。
我们可以通过平移、旋转、缩放等变换来改变图形。
变换需要按照一定的顺序进行,
例如先进行旋转再进行平移等。
在OpenGL中,我们可以通过设
置变换矩阵来完成图形的变换。
变换矩阵包含了平移、旋转、缩
放等信息,通过矩阵乘法可以完成图形的复合变换。
最后,视图变换是指将三维场景中的图形投影到二维平面上,
成为我们所见到的图形。
在实验中,我们学习了透视投影和正交
投影两种方式。
透视投影是指将场景中的图形按照视点不同而产
生不同的远近缩放,使得图形呈现出三维感。
而正交投影则是简单地将场景中的图形按照平行投影的方式呈现在屏幕上。
在OpenGL中,我们可以通过设置视图矩阵和投影矩阵来完成视图变换。
通过本次实验,我对于计算机图形学有了更深入的了解,并掌握了一些基本的图形绘制和变换知识。
在今后的学习中,我将继续学习更高级的图形绘制技术,并应用于实际的项目中。
计算机图形学中的基本图形生成算法--文献综述

本文中研究的一维图形的算法主要包括直线段、圆与椭圆。
在使用计算机处理相应图形信息时经常会遇到计算机内部储存比较大的图形,以至于屏幕显示图形只是部分图形,不能完整显示。这个时候确定图形中哪些部分在显示区域中显示,而哪些不在显示区域内显示则对计算机的选择处理过程提出了要求,遇到这种情况就要运用裁剪操作,从线段裁剪到多边形裁剪有许多方法,其中主要的方法有:Cohen-Sutherland裁剪算法、中点分割算法、参数化方法和Reentrant Polygon Clipping算法。在王慧玲、冯雪花发表于《伊犁师范学院学报(自然科学版)》2008年第4期上的《对Cohen-Sutherland线段裁剪算法的分析及改进》一文中则针对上述方法中的Cohen-Sutherland线段裁剪算法提出了重点分析,首先,作者对Cohen-Sutherland线段裁剪算法提出了详细的解析:该算法运用编码的方法实现了对在显示区域内和显示区域外的判断来决定是否显示在在显示区域内显示,与此同时,这篇文章中除了研究和分析Cohen-Sutherland线段裁剪算法,还针对Cohen-Sutherland线段裁剪算法对判断所有的完全位于裁剪窗口之外的线段不能有效地情况下提出了可以通过添加判断条件,使之能完全判断出来,这使得减少了求交的次数,也提高得该算法的运算效率。关于中点分割法和参数化方法孙家广等在《计算机图形学(第3版)》一书中进行了阐述,中点分割法与Cohen-Sutherland线段裁剪算法相同点是利用对线段的端点编码,与之不同的是对于跨窗口边界的线段中点分割法将其等分为两段,直到最后的分割点与线段的端点距离达到分辨率的精度为止。多边形的裁剪与线段的裁剪不一样,如若把多边形分解成边界线段逐段进行裁剪会使得原来封闭的图形变得不封闭或者成为一些离散的线段。Suther-land和Hodgeman发明的逐次多边形裁剪(Reentrant Polygon Clipping)算法则解决了上面这个问题,该方法的基本思想是一次用裁剪窗口的一条边对多边形进行裁剪。上面对线段和多边形的裁剪的基本算法进行了一些介绍,在上面一些算法的基础上,韩俊卿,葛永慧和张东升在《太原理工大学学报》2005年第36卷第2期上面发表的《多边形窗口的矢量图形裁剪算法》一文则讨论了对于改进后的多边形窗口中的点、线、面等目标的裁剪算法,在这些算法之中,点目标的裁剪算法采用的是射线交叉法,线目标的裁剪算法采用的是通过对计算被裁剪线段和多边形的各个边真实交点之间的各个线段中点来判断是否对它们裁剪,在点和线的裁剪基础上实现面目标的裁剪。
3基本图形生成算法

若d>=0, 取P2为下一象素,再下一象素的判别式为
d' F(xp 2, yp 1.5) (xp 2)2 (yp 1.5)2 R2 d 2(xp yp ) 5
初始象素是(0,R),判别式d的初值为
d0 F(1, R 0.5) 1.25 R
使用e=d-0.25代替d e0=1-R
y方向不走步
e
e’
P
P1
Bresenham画线算法(4/6)
为方便与0比较,设e=e-0.5
e0=-0.5 当e≥0时,最接近P2(xi+1,yi+1)
y方向走一步 当e<0时,最接近P1(xi+1,yi)
y方向不走步 有浮点数,不宜硬件实现
P2
e’
e P P1
P2
e
e’
P
P1
Bresenham画线算法(5/6)
=2 (i-xi)-1
若dDV’<0,则选D 若dDV’>0,则选V 若dDV’=0,则选D
情形④也 适用
Bresenham画圆算法(5/7)
当i=0时,D在圆上,⑤ 按d判别,有d>0,应选D 按d’判别,有d’<0,应选D
Bresenham画圆算法(6/7)
当i<0时,
若dHD≤0,选H 若dHD>0,选D
=(xi+1)2+yi2-R2 + (xi+1)2+(yi-1)2-R2
=2 (i+yi)-1
若dHD <0,则选H 若dHD >0,则选D 若dHD =0,则选H
情形②也 适用
Bresenham画圆算法(4/7)
当i>0时,D在圆外,③④
基本图形生成算法

的A、B、C 处就会发现错判现象。
例如,在 A处,扫描线通过一点 后以为进入多边形,其实此时已出 多边形。结果是在A点之后的扫描线段上全都错误地填上 色。在B和C处,因为光栅化后,使得扫描线通过交点的 个数发生变化而同样导致填色错误。
区域填充算法:
因此,原始的奇偶判断方法需要加以周密地改善, 才能成为计算机中实用的填色算法。
填色算法分为两大类:
(1)扫描线填色(Scan-Line Filling)算法。
对应的像素集,并有指定的属性或图案显示之,即区域
填充。 光栅化和扫描转换是光栅图形学的基本问题,其算 法的好坏对系统的效率有直接关系。
直线的生成算法
在数学上,理想的直线是没有宽度的、由无数
个点构成的集合。
当对直线进行光栅化时,人们只能在显示器所
给定的有限个象素组成的矩阵中,确定最佳逼近于
该直线的一组象素,并且按扫描线顺序,用当前写
对于直线斜率k在0~1之间的情况,从给定线段的
左端点P0(x0,y0)开始,逐步处理每个后续列x位置,并
在扫描线y值最接近线段的像素上绘出一点。 假设当前直线上的像素已确定,其坐标为(x,y), 那么下一步需要在列xi+1上确定扫描线y的值。y值要 么不变,要么递增1,可通过比较d1和d2来确定。
直线的生成算法
d2=(yi+1)-y =yi+1-(k(xi+1)+b) 那么:d1- d2 = 2k(xi+1)-2yi + 2b-1 设Δ y=y1-y0 和Δ x=x1-x0 ,则 k=Δ y/Δ x,代人上式, 得:Δ x(d1- d2)= 2·Δ y·xi- 2·Δ x· yi + c
其中, c是常量,c= 2Δ y +Δ x(2b-1),与像素位置无关。
计算机图形学_基本算法

第三章 基本图形生成算法
19
返回
这里仅关心正负号,不关心具体的值, 由此可得第一象限的偏差判别公式为:
Fm=YmXa-YaXm
该公式每次计算时都要计算两次乘 法,一次减法,相对多步绘图过程计算 较慢,需改进计算公式,提高计算速度。
20
返回
如果设法利用前一点的偏差计算结果
来推算后一点的走向及走步后的偏差,就
可简化计算。
如以第一象限为例(见图2-4(b))
画直线 : (X1,Y1)—(X2,Y2) 26 返回
工作原理: 令: k=ΔY/ΔX=(Y2-Y1)/(X2-X1)
ΔX、ΔY为X、Y方向的长度增量
让X、Y方向绘图时每次微小增加,取整后绘图
则: Xi+1=Xi+εΔX Yi+1=Yi+εΔY
其中: εΔX 为小于1的小增量,保证绘图精度
εΔY(绘图位置为整数值,设备坐标)
其中|Xa|、|Ya|为Xa、Ya的绝对值,Xa、Ya均为
步距数。
24
返回
4
2.1.3 终点判断
设:绘图设备的步距为t, 直线段在x,y方向的增量分别为dx,dy,
则:从起点到终点, 在X方向上应走dx/t步 在Y方向应走dy/t步
取其中的大值作为步数控制器,保证不 会丢失走的步数,也可取它们之和作为步数 控制器,力求终点绘制准确。
计算机图形学实验大纲

《计算机图形学基础教程(Visual C++版)》实验大纲
一、实验目的与要求:
实验目的:巩固学生对计算机图形学的直线扫描转换原理、有效边表填充原理、三维透视投影原理、ZBuffer深度缓冲消隐原理和真实感图形生成原理的理解,增加学生对真实感图形生成算法的感性认识,强化训练学生使用Visual C++的MFC编写相关图形类的技能。
此前,课堂上已经完成《计算机图形学实践教程(Visual C++版)》的43个验证性实验的讲解,在此基础上,要求学生能综合使用全部教学内容完成综合性实验。
实验要求:要求学生在实验前了解综合性实验的目的和要求,观察实验效果图。
在实验中认真理解每个类的结构,通过搭积木的方式完成实验任务。
实验结束后按要求整理相关类的源程序,撰写实验报告,尤其需要对难点和重点进行详细说明。
二、实验项目与提要:
三、成绩考核方法:
本实验与计算机图形学课程同步开设,成绩占期末总成绩的20%~40%。
四、本课程与其他课程的联系和分工
先修课程:高等数学、线性代数、MFC程序设计语言、数据结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指导教师签名:
注:按表中内容填写、选项【选项打钩(√)】。
外文翻译
已完成(),进行中(√);完成字数约:字(翻译成中文后的汉字字数)
正文
完成定稿(),进行中(√)完成百分比:90 %
目前已完成任务
文献综述、开题报告
论文正文除英文摘要的其他部分
尚须完成的任务
论文正文的摘要的英文翻译
外文翻译
存在的问题
英文翻译
外文翻译的文章Βιβλιοθήκη 取采取的办法利用各种翻译工具并结合自己的英文能力,好好翻译,跟朋友讨论
浙江师范大学本科毕业设计(论文)中期检查自查表
学院名称:数理与信息工程学院检查日期:2013年3月8日
学生姓名
**
专业名称
信息与计算科学
任务书
已完成(√),进行中()
参考文献
16篇;其中外文文献4篇
文献综述
已完成(√),进行中();完成字数约:5106字
开题报告
已完成(√),进行中();完成字数约:3635字