图形学习题1Word文件下载.docx
《图形学习题1Word文件下载.docx》由会员分享,可在线阅读,更多相关《图形学习题1Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
1请用代码描述使用DDA算法绘制一条斜率介于-45度和45度(即|m|<
=1)之间直线的步骤。
解:
假设线段的两个端点(x1,y1)和(x2,y2),且x1<
x2
intx=x1,y;
floatyf=y,m=(y2-y1)/(x2-x1);
while(x<
=x2)
{
y=Floor(yf+0.5);
setpixel(x,y);
x++;
yf=yf+m;
}
2请用代码描述使用DDA算法绘制一条斜率介于45度和-45度之(即|m|=1)之间直线的步骤。
假设线段的两个端点(x1,y1)和(x2,y2),且y1<
y2
intx,y=y1;
floatxf=x,
minv=(x2-x1)/(y2-y1);
while(y<
=y2)
x=Floor(xf+0.5);
x=xf+minv;
y++;
3.写出使用Bresenham算法绘制一条斜率介于0度和45度(即|m|<
=1)之间直线的步骤
(1)计算初始值:
dx=x2-x1,dy=y2-y1,InC1=2dy
InC2=2(dy-dx),d=InC1-dx
(2)设置左下方的端点坐标为(x,y),同时将xend设为x的最大值。
如果dx<
0,则x=x2,y=y2和xend=x,如果dx>
0,那么x=x,y=y和xend=x2。
(3)在当前的(x,y)坐标画一个点。
(4)判断整条线段是否已经画完,如果x=xend就停止。
(5)计算下一像素的位置。
如果d<
0,那么d=d+InC1。
如果d>
=0,那么d=d+InC2,并且y=y+1
(6)增加x:
x=x+1
(7)在当前的(x,y)坐标画一个点。
(8)转到步骤(4)。
4.请指出用Bresenham算法绘制从像素点(1,1)到(8,5)的线段时的像素位置。
首先必须先找到初始值。
在这个例子中,
dx=x2-x1=8-1=7dy=y2-y1=5-1=4
因此,InC1=2dy=2*4=8
InC2=2(dy-dx)=2*(4-7)=—6
D=InC1-dx=8-7=1
由算法算出的值示于下图
d
x
y
1
1
1+InC2=-5
2
-5+InC1=3
3
3+InC2=-3
4
-3+InC1=5
5
5+InC2=-1
6
-1+InC1=7
7
7+InC2=1
8
5,请推导出Bresenham算法的迭代公式P(32-33)
d1=y-yi=(k(xi+1)+b)-yi
d2=(yi+1)-y=yi+1-(k(xi+1)+b)
所以d1-d2=2k(xi+1)-2yi+2b-1
设dy=y1-y0,dx=x1-x0,k=△y/△x=dy/dx
所以dx(d1-d2)=2dyxi-2dxyi+c
(c=2dy+dx(2b-1))
令di=dx(d1-d2)
因为dx>
所以当di<
0时,右方像素(xi+1,yi)接近
di>
0时右上方(xi+1,yi+1)
所以第b+1步:
di+1=2dyxi+1-2dxyi+1+c
di+1-di=2dy(xi+1-xi)-2dx(yi+1-y0)
因为xi+1=xi+1
所以di+1=di+2dy-2dx(yi+1-yi)
若右方:
则yi+1=yi所以di+1=di+2dy
若右上方:
则yi+1=yi所以di+1=di+2dy-2dx
第一次参数d0=2dy-dx
6.区域填充算法对水平边的处理方法是怎样的,请分析。
7.各边形定点坐标v1---v8如下:
v1=(2,4),v2=(9,4),v3=(9,7),v4=(8,7),v5=(8,9),v6=(4,9),v7=(4,7),v8=(2,7)说明扫描线y=6,7,8,9,10时,哪些边会被激活?
x列包含对应最低点的x坐标,水平不包括:
含其中
Edge
ymin
ymax
1/m
E2
9
E8
E4
E6
当扫描线的值y=边界线被激活。
此后边界线保持活跃,直到扫描线的值y大于边界线的ymax值。
因此扫描线y=6,7,8,9和10时被激活的边界线如下所示:
当y=6时,E2和E8被激活
当y=7时,边E2和E8的ymax=y,所以继续保持活跃。
与此同时E4和E6也被激活
当y=8时,近E2和E8被移出边界列表。
E4和E6继续保持活跃。
当y=9时,活跃的边没有变化
当y=10时,边E4和E6被移出边界列表,边界列表变为空。
8.在区域填充法中,什么是扫描线?
它来源于光栅显示器的显示原理。
对于屏幕上所有待显示像素的信息,将这些信息按从上到下从左至右的方式显示。
在这里,每一趟自左至右的显示所涉及的像素集合具有相同的y坐标值,形成一条直线,它就是一条y方向扫描线。
同样道理,每一趟从上到下同样也能形成x方向扫描线。
不过,人们更加习惯自左至右的扫描线。
第四章图形变换
1.导出平面坐标系X-O-Y中点(x,y)绕原点O转动θ的变换矩阵。
如上图x′=rcos(θ+φ),y′=rsin(θ+φ)
x=rcosφy=rsinφ
∴x′=rcos(θ+φ)=r(cosθcosφ-sinθsinφ)=xcosθ-ysinθ
y′=rsin(θ+φ)=r(sinθcosφ+cosθsinφ)=xsinθ+ycosθ
设P′=『x′P=『x且Rθ=『cosθ-sinθ
y′』,y』sinθcosθ』
P′=RθP
2.点P(2,-4)绕原点转动30度的新坐标是什么?
解;
R30°
=『cos30°
-sin30°
=『√3/2-1/2
Sin30°
cos30°
』1/2√3/2』
新的坐标可以通过矩阵乘法得到
『√3/2-1/2·
『2=『√3+2
1/2√3/2』-4』1-2√3』
3.写出点Q(x,y)绕定点P(h,k)旋转的变换矩阵
通过三步确定:
(1)平移对象,使它的旋转中心P与原点重合。
(2)绕原点旋转(3)将P平移回(h,k)
使用V=hI+kJ作为平移向量,Rθ.P可通过组合变换得到:
Rθ.0′=Tv·
Rθ·
T-V
附:
旋转变换的通用矩阵Rθ.P=『10h『cosθ–sinθ0『10-h
O1ksinθcosθ001-k
O01』001』001』
=『cosθ–sinθ(-hcosθ+ksinθ+h)
sinθcosθ(-hsinθ-kcosθ+k)
001』
4,将三角形A(0,0),,B(1,1),C(5,2)放大2倍,保持C不动,写出变换矩阵和ABC的新位置。
变换矩阵(V=5I+2J向量)得V=5I+2J
10520010-5
S2,2,C=TV·
S2,2·
T-V=01202001-2
001001001
20-5
=02-2
001
x
用y表示坐标为(x,y)的P点,得出
20-50-5
S2,2,C·
A=02-2·
0=-2
00111
20-51-3
B=02-2·
1=0
00111
20-555
C=02-2·
2=2
∴ABC的新位置是
A、1(5,-2),B(-3,0),C(5,2)
(附)
相对于固定点P(h,k)缩放变换的通用矩阵是
Sa,b,p=Tv·
Sa,b·
T-v
10ha0010-h
=01k0b001-k
001001001
A0-ah+h
=0b-bk+k
001
5,为什么要使用齐次坐标的表达式?
答:
为了使各种变换的表示形式一致,从而使变换合成更容易,引入齐次坐标,平移变换为矢量加法,旋转缩放为矩阵的乘法,
齐次坐标就是用n+1维向量表示n维向量。
一方面可以表示无穷点,一方面是所有几何变换都可以用矩阵乘法来表示,获得平移,旋转,所放的一致性,表示
平移X´
100△XX
Y´
010△YY
Z´
=001△Z*Z或P´
=T*P
100011
缩放
X´
Sx000X
0Sy00Y
=00Sz0*Z或P´
=S*P
100011
旋转:
绕X轴旋转
X´
1000X
0cosα-sinα0Y
=0sinαcosα0*Z或P´
=Rx(α)*P
绕Y轴旋转
cosα0sinα0X
0100Y
=-sinα0cosα0*Z或P´
=Ry(α)*P
绕Z轴旋转
cosα-sinα0