当前位置:文档之家› 基本图形生成算法

基本图形生成算法


3.1.4 直线属性
1.线型 2.线宽 3.线色
第3章 基本图形生成算法
第3章 基本图形生成算法
3.2 生成圆弧的常用算法
3.2.1 圆的特性
圆心位于原点的圆有四条对称轴:x=0,y=0, x=y和x=-y直线。若已知圆弧上一点(x,y),可 以得到其关于四条对称轴的其它7个点,这种性质 称为八对称性,如下图所示。
图形系统的任务之一就是将在连续空间中定义的几何元 素转化为图像空间中的像素表示。这一转化任务称为扫 描转换或光栅化。
扫描转换
矢量图形
光栅图形
第3章 基本图形生成算法
3.1 生成直线的常用算法
均假定所画直线的斜率k∈[0,1]。
3.1.1 DDA画线算法
DDA(Digital Differential Analyzer)画线 算法也称数值微分法,是一种增量算法。它的算 法实质是用数值方法解微分方程,通过同时对x和 y各增加一个小增量,计算下一步的x、y值。
y=(int)r; d=(int)(3-2*r); while(x<y) { Cirpot(x0,y0,x,y,color);
if(d<0) d+=4*x+6;
else {d+=4*(x-y)+10;y--; } x++; } if(x==y) Cirpot(x0,y0,x,y,color); return(0); }
第3章 基本图形生成算法
已知一条直线段L(P0, P1),其端点坐标为: P0 (x0, y0), P1(x1, y1)。可计算出直线的斜率k 为:
k y1 y0 x1 x0
假定端点坐标均为整数,取直线起点P0 (x0, y0)作为初始坐标。画线过程从x的左端点x0开始, 向x右端点步进,每步x递增1,y递增k(即直线 斜率);取像素点(x,round(y))作为当前 点的坐标。
令M为P1和P2的中点,易知 M的坐标为(xp+1,yp-0.5)。 显然,若M在圆内,则P1离圆弧 近,应取为下一个像素;否则应 取P2。
第3章 基本图形生成算法
判别式d: d的初始值为:
d0 F (1, R 0.5) 1 (R 0.5)2 R 2 1.25 R
在d≥0的情况下,取右下方像素P2, 在d<0的情况下,取正右方像素P1,
判别式:
第3章 基本图形生成算法
di=D(p1i)+D(p2i)=2(xi+1)2+yi2+(yi-1)2-2r2 用i+1代替i,得:
di+1=D(p1i+1)+D(p2i+1)=2(xi+1+1)2+yi+12+(yi+11)2-2r2
判断式d的初始值为: d0= 3-2r。 如果d i>=0,则选p2i, yi+1=yi-1,
通常将参数法描述的图形称为参数图形,也称矢量图形。而 把点阵法描述的图形叫做像素图形,简称图像。
一般地,复杂的图形是由基本的图形元素如点、线、圆及多 边形构成的。这些图形元素通常是在连续的空间定义,而不 是由离散图像空间中的像素定义。
光栅图形的表示方法是点阵式,它的主要特点是面着色, 即在指定的平面区域着上所需要的颜色。与单纯由线条所 构成的线划图形相比,采用面着色绘制的光栅图形显得更 为生动、直观,真实感更强。
值赋给变量d; 3.绘制点(x,y),其中x=0,y=b及其在另外3个象限上的对称 4. 根据d的符号选取增量。若d<0,则先执行d=d+b2(2x+3),再
将(x,y)修改为(x+1,y),否则先执行 d=d+b2(2x+3)+a2(-2y+2),再将(x,y)修改为(x+1,y-1);
第3章 基本图形生成算法
第3章 基本图形生成算法
任意点(x,y)与椭圆弧的位置关系为:
若F(x,y)=0 则点(x,y)在椭圆上; 若F(x,y)<0 则点(x,y)在椭圆内; 若F(x,y)>0 则点(x,y)在椭圆外。
第3章 基本图形生成算法
椭圆弧的中点扫描转换算法大致步骤
1.分别输入椭圆长半轴的长度a和短半轴的长度b; 2.计算上半部分的判别式的初值d10,d10=b2+a2(-b+0.25),将该
设Q是理想直线与垂直线x=xp+1 的交点。显然,若M在Q的下方,则P2 离直线近,应取为下一个像素;否则应 取P1。
第3章 基本图形生成算法
令a=y0-y1,b=x1-x0,c=x0y1-x1y0。 构造判别式:
d=a(xp+1)+b(yp+0.5)+c d的初始值d0 = a+0.5b 在d≥0的情况下,取正右方像素P1, d1=a(xp+2)+b(yp+0.5)+c =d+a 在d<0的情况下,取右上方像素P2, d2=a(xp+2)+b(yp+1.5) = d+a+b
本节讨论的圆的生成算法 均只计算从x=0到x=y分段内 (1b区域)的像素点,其余的 像素位置利用八对称性即可得 出。
第3章 基本图形生成算法
3.2.2 中点画圆算法
假设x坐标为xp的各像素点中,与该圆弧最近者 已确定,为P(xp,yp),那么,下一个与圆弧最近的 像素只能是正右方的P1(xp+1,yp),或右下方的P2 (xp+1,yp-1)两者之一。
第3章 基本图形 生成算法
扫描转换的必要性
第3章 基本图形生成算法
计算机图形学中所研究的图形是从客观世界物体中抽象出来 的带灰度(或彩色)及形状的图或形。计算机中表示一个图 形常用的方法有两种:
(1)点阵法:是用具有灰度或色彩的点阵表示图形的一种 方法,它强调由哪些点组成,并具有什么灰度或色彩。
Hale Waihona Puke (2)参数法: 是以计算机中所记录的形状参数与属性参数 表示图形的一种方法。形状参数可以是描述其形状的方程的 系数、线段的起点和终点等;属性参数则包括灰度、色彩、 线型等非几何属性。
第3章 基本图形生成算法
void IntMidPointCircle(int x0,int y0,double r,int color)
{ int x=0,y,d;
y=(int)r;
d=(int)(1-r);
Cirpot(x0,y0,x,y,color);
while(x<y)
{
if(d<0)
d+=2*x+3;
第3章 基本图形生成算法
3.1.2 中点画线算法
假设x坐标为xp的各像素点中,与直线最近者已 确定,为P(xp,yp),那么,下一个与直线最近的像 素只能是正右方的P1(xp+1,yp),或右上方的P2 (xp+1,yp+1)两者之一。令M为P1和P2的中点, 易知M的坐标为(xp+1,yp+0.5)。
5. 当b2(x+1)<a2(y-0.5)时,重复步骤3和4。否则转到步骤6; 6. 用上半部分计算的最后一点(x,y),计算下半部分的判别式的
初值d20 , d20 = b2(x+0.5)2+a2(y-1)2-a2b2,将该值赋给变量d;
7.绘制点(x,y)及其在另外3个象限上的对称点; 8. 根据d的符号选取增量。若d<0,则先执行 d=d+ b2(2x+2)+ a2(-2y+3),再将(x,y)修改为(x+1,y-1);否则 先执行d=d+ a2(-2y+3),再将(x,y)修改为(x,y-1); 9. 当y≥0时,重复步骤7和8,否则算法结束。
第3章 基本图形生成算法
P1,p2两点到圆心的距离的平方与圆弧上一点到圆 心的距离的平方之差分别为:
D(p1)=(x+1)2+y2-R2 D(p2)=(x+1)2+(y-1)2-R2 如果|D(p1)|≥|D(p2)|则点p2比点p1更接近实际 的圆弧;反之,则应选择点p1。 若定义: d =|D(p1)|-|D(p2)| 若d≥0 选p2,若d<0选p1。
else
{d+=2*(x-y)+5;y--;
}
x++;Cirpot(x0,y0,x,y,color);
}
if(x==y) Cirpot(x0,y0,x,y,color); return(0);
}
第3章 基本图形生成算法
void Cirpot(int x0,int y0,int x,int y,int color) {putpixel(x+x0,y+y0,color); putpixel(x+x0,-y+y0,color); putpixel(-x+x0,y+y0,color); putpixel(-x+x0,-y+y0,color); putpixel(y+x0,x+y0,color); putpixel(y+x0,-x+y0,color); putpixel(-y+x0,x+y0,color); putpixel(-y+x0,-x+y0,color); }
第3章 基本图形生成算法
3.2.3 Bresenham画圆算法
假设生成圆心在坐标原点,半径为r,从x=0到 x=y的1/8圆弧。
xi+1=xi +1 相应的y则在两种可能中选择:
y=yi,或者y=yi-1 选择的原则是考察理想的y值 是靠近yi还是靠近yi-1。
相关主题