第3章基本图形的生成

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

P2
M2
Q
P4
M
M1
中点M的坐标为: xp+1 yp+0.5
P
P1
P3
2 欲判断Q点在M的上方还是下方,将M带入பைடு நூலகம்(x,y),判断它的符号即可。
3 该算法的缺点: 画线效率低,每步都需要一个浮点乘法运算和一个 四舍五入运算,需要加以改进。
二 数值微分法的改进算法(关键:找到Pi(Xi,Yi), Pi+1(Xi+1,Yi+1)的关系)
1 推导:
直线方程:y=kx+b
直线上的第i、第i+1……个点为:Pi(Xi,Yi), Pi+1(Xi+1,Yi+1),…
一 数值微分法:是一种基于直线微分方程来生成直线的方法。
1 直线的微分方程: dy y y1 y0 k dx x x1 x0
2 直线的斜截式方程:
y=kx+b
b=y1-kx1 x从起点到终点每次增加1,用y=kx+b计算y值, 再用putpixel(x,int(y+0.5),color)输出该像素。
意 图
(xi, yi)
(xi+1, yi+k)
(xi, (int) (yi))
理想直线上的坐标点 扫描转换后的像素点
2 算法:
1)计算斜率 k=△y/△x 2)画第1个点(x0,y0)
3)计算下一个点(x,y)的值P,
x=x+1, y=y+k 小数部分≥0.5, 则 y=y+1
小数部分< 0.5, 则 y=y 画点(x,y)
y=y+k;
//计算斜率 //设定第1点的y值 //x 加1 //画点,y值取整 //计算y的值
}
}
4 分析:
本算法中k值需要使用浮点,每一步都要进行取整运算, 不利于硬件实现。可以用中点画线法解决。
3.2.2 中点画线法: 一 原理:
P2 Q
M
P5
ax+by+c=0
M2
P4 M1
P
P1
P3
中点画线法示意图
计算Pi+1 时:x为xi+1,
(在第1象限x 总是向右前进一步),
y为 y
(画水平线时,y的值不变)
yi+1 (画非水平线时,y的值变化,需要计算)
其中:yi+1的计算为:
yi+1=kxi+1 +B
=k(xi+△x)+B =kxi+k△x +B =kxi+B+k△x =yi +k△x
//yi=kxi+B
1 什么叫扫描转换(光栅化)?
在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程 。
2 扫描转换的主要工作:
由于理想的图形是连续的,而光栅图像是离散的,因此显示过程中不可 避免地产生锯齿等畸变, 扫描转换的主要工作就是研究使光栅图像逼近原始的图形的算法。
用一系列的象素点来逼近直线
3 学习扫描转换的目的:
=yi +k
//当△x的步进为1时
故Pi
点的坐标为:
+1
xi+1=xi+1
yi+1=round ( yi+k) //进行取整运算
xi+1=xi+1 yi+1=round ( yi+k)
分析:下一点的y坐标为当前点y 坐标加上斜率k,省略了浮点乘法。



(xi+1,(int) (yi+k))



例: 要在屏幕上显示一条直线时,只能确定出逼近直线的 一组像素, 并按扫描线顺序对这些像素进行写操作,即进行扫描转换。
结果: 使所画的直线转换成为逼近理想直线的由无数个点构成的集合 。
画图形:可使用同样的方法,即进行图形的扫描转换.
使所画的图形转换成为逼近理想图形的由 无数个点构成的集合 。
二 扫描转换(光栅化):
(1) 绘图函数具有局限性: 在实际工作中遇到画线的工作时,可以方便地调用程序设计 语言中提供的绘图函数,不需要自己编写画线的程序。 但它由局限性,不能满足用户特殊绘图要求,需要开发出满 足需求的绘图程序。
(2) 学习目的: 掌握将数学的、模拟的、线形的图形变成数字的离散的图形 的过程中的设计思想和方法,这些思想能够在科学研究和产 品开发中发挥作用。
第3章 基本图形生成原理
概论
一 光栅扫描:
1 光栅扫描的基本原理: 电子束在荧光屏上按照固定的扫描线和扫描顺序扫出 一个由行和列组成的光的栅网。
2 像素: 栅网中的每一个孤立的光点,它是光栅显示的最小单位。 像素可以有不同的亮度,像素的坐标值都是整数。
3 提出问题
(1)目前使用的图形输出设备显示器:光栅图形显示器
1 有直线F(x,y)=ax+by+c=0,假定其斜率在0,1之间. 2 直线在x方向增加一个单位,则在y方向上的增量只能在0与1之间。 3 当前点为P(xp,yp),下一点有两种选择:P1(xp+1,yp)或P2(xp+1,yp+1). 4 Q点是直线与垂直线x=xp+1的交点。M(xp+1,yp+0.5)为 P1与P2的中点。
(2)光栅图形显示器:
以光栅扫描方式刷新线段、字符和图形。 其本质: 是一种画点设备,是由一定数量的网格状细小光点
(像素)组成,使其某些像素亮,某些像素不亮来显 示图形或文字.
(3)问题:
光栅图形显示器是画点设备,而二维图形并不是点的集合,
如何在光栅图形显示器上构造基本二维几何图形(线 圆)? (4)解决方法: 进行图形扫描转换
若直线上的点Q在M的下方,说明直线离P1近,则应取P1为下一点。 若直线上的点Q在M的上方,说明直线离P2近,则应取P2为下一点,
问题:如何判断Q在M的什么位置?
二 判别式推导:
P5
1 直线方程:
F(x,y)=ax+by+c=0
直线上的点: F(x,y)=0
直线上方的点: F(x,y)>0
直线下方的点: F(x,y)<0
循环
3 程序:
void ddaline(x0,y0,x1,y1,color)
int x0,y0,x1,y1,color;
{
int x;
float dx,dy,k,y;
dx=x1-x0;
dy=y1-y0; k =dy/dx; y =y0; for(x=x0;x<=x1;x++) { putpixel(x,(int)(y+0.5),color);
5.1 直线的生成
一 问题的提出:
给定直线两端点P0(x0,y0)和P1(x1,y1), 在光栅显示器上画出该直线。
二 需要进行扫描转换: 给出一个将直线转换为逼近理想直线的点的集合的算法。
三 算法要求:
1 准确:扫描点尽可能地逼近理想点。 2 快速:改进算法尽 快提高扫描转换速度。
5.2. 数值微分法(DDA算法 Digital Differential Analyzer )
相关文档
最新文档