实验报告
—计算机图形学实验大作业
课程名称 计算机图形学
实验名称 二维绘图系统与计算机动画
姓 名
学 号
专业班级
成 绩
指导教师 爨莹
实 验 报 告
课程名称 计算机图形学 实验名称 二维绘图系统
姓 名 学 号 专业班级
实验日期 2015 年 12 月 8 日 成绩 指导教师 爨莹
一、实验目的
本实验为设计和开发一个小型的二维绘图系统。通过图形软件的设计开发和上机实验,巩固所学图形学基本知识,掌握交互式图形系统的设计方法,熟悉并掌握有关图形图象编程语言、工具和类库的使用。
二、实验环境
Win 8 操作系统 + VC 6.0 开发平台
三、实验内容与步骤
1、算法原理
(1)DDA算法画直线原理
DDA算法是根据直线的微分方程来计算Δx或Δy生成直线的扫描转换算法。 在一个坐标轴上以单位间隔对线段取样, 以决定另一个坐标轴方向上最靠近理想线段的整数值。
设(x0, y0)为直线段的始点, (x1, y1)为直线段的终点, 且端点坐标均为整数, 则直线的微分方程为
设|k|≤1, 则有
yi+1=kxi+1+b=k(xi+Δx)+b=yi+kΔx
上式表明, 若Δx=1, 则当x每递增1时, y递增k。
扫描转换开始时, 取直线始点(x0, y0)作为初始坐标。
(2)中点Bresenham算法画直线原理
Bresenham画线算法与中点画线法有相似之处, 也是通过在每列像素中确定与理想直线最近的像素来进行直线的扫描转换的。 为了讨论的方便,不妨也假定直线的斜率在0~1之间。 如图所示, 过各行、 各列像素中心构造一组虚拟网格线, 按直线从起点到终点的顺序计算直线与各垂直网格线的交点, 然后确定该列像素中与该交点最近的像素。
Bresenham算法误差项d的几何意义
(3)中点Bresenham算法画圆算法原理
为了讨论的方便, 我们考虑中心在原点, 半径为R的圆的第二个八分圆弧, 圆的其它部分可通过一系列的简单的反射变换得。也就是讨论如何从(0, R)到 (R / ,R/ )顺时针确定最佳逼近于该圆弧的像素序列。
中心在原点, 半径为R的圆的方程为x2+y2=R2
? 若令F(x,y)=x2+y2-R2, 则上述方程为 F(x, y)=0
如图所示, 假定x坐标为xP的像素中最佳逼近理想圆弧的为P(xP, yP), 那么, 下一个像素只能是正右方的P1(xP+1, yP)或右下方的P2(xP+1, yP-1)两者之一。 引入P1和P2的中点M(xP+1, yP-0.5), 当M在圆内时, 应取P1(xP+1, yP)为下一个像素, 否则, 应取P2(xP+1, yP-1)为下一个像素。 为此, 构造判别式
? d=F(M)=F(xP+1, yP-0.5)=(xP+1)2+(yP-0.5)2-R2
中点画圆法
若d<0, 则应取P1(xP+1, yP)为下一个像素, 而且再下一个像素的判别式为
? d′=F(xP+2, yP-0.5)=(xP+2)2+(yP-0.5)2-R2=d+2xP+3
而d≥0, 则应取P2(xP+1, yP-1)为下一个像素, 而且再下一个像素的判别式为
? 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
(4)中点bresenham算法画椭圆原理
中点画圆法可以推广到一般二次曲线的生成, 下面以中心在原点的标准椭圆的扫描转换为例说明。 设椭 圆的方程为