计算机图形学基础教程课件之习题课1(第二版)(孙家广 胡事民编著)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当d≥0.5时,最接近于当前象素的右上方象 素(xi+1,yi+1),x方向加1,d减去1; 而当d<0.5时,更接近于上方象素(xi,yi+1)。 为方便计算,令e=d-0.5,e的初值为-0.5, 增量为1/k。 当e≥0时,取当前象素(xi,yi)的右上方象素 (xi+1,yi+1),e减小1; 而当e<0时,更接近于上方象素(xi,yi+1)。
0 sin 1 0
36 0 36 0
0 cos
0 0 0 1
;
画半圆;}
5. 写出下图中多边形的边表(新边表)
P3(2,6) 6 P5(7,5) 5 4 P4(5,4) 3 P2(2,3) 2 P6(8,2) 1 P1(4,1)
0 1 2 3 4 5 6 7 8
6 5 4 3 P2(2,3) 2 1 0
P3(2,6)
P4(5,5)
P5(7,6)
P6(8,2) P1(4,1)
6. 写出以原点为球心,半径为2的球体的旋转生成算 法。 算法一:以点为基本图元 for(j=0;j<72;j++) { 绕Y轴逆时针旋转5度,变换矩阵为Ry; //画出半圆 画点(0,2,0);
for(i=0;i<36;i++)
{ 将当前点绕Z轴逆时针旋转5度,矩阵为Rz; 画变换后的点(x′,y′,z′);}}
1 2 3 4 5 6 7 8
5. 写出下图中多边形的边表(新边表)。
6 6 5 4 3 P2(2,3) 2 1 0 P3(2,6) P5(7,5) 5 P3P4 5 -1.5 6
4 P4(5,4)
P1(4,1)
5 2 5 P2P3
P5P6 4 4 2 P1P6
3
P6(8,2) 2 1 0
2 0 6
显示器(CRT、LCD、等离子)、打印机、 绘图仪等。
2. 常用的图形输入设备是什么?
键盘、鼠标、跟踪球、空间球、数据手套、 光笔、触摸屏、扫描仪等。
3. 列出3种图形软件工具。
AutoCAD、SolidWorks、UG、ProEngineer、 CorelDraw、Photoshop、PaintShop、Visio、 3DMAX、MAYA、Alias、Softimage等。
0 1 1 1 3 A T A 1 0 1 2 0 0 0 1 1 1
0 1 1 5 3 B T B 1 0 1 2 4 0 0 1 1 1
0 1 1 3 6 C T C 1 0 1 5 2 0 0 1 1 1
6.空间直线AB的两端点坐标为A(0,0,0), B(1,1,1),试写出绕AB旋转45°的三维复合 变换矩阵。
7. 写出以原点为球心,半径为2的球体的旋转生成算 法。
P1(4,1)
1 2 3 4 5 6 7 8
4 -1 3 P1P2
4 4 2 P1P6
6.已知三角形ABC的各顶点坐标为A(1,2)、 B(5,2)、C(3,5),现有直线L,L上的两点P、 Q的坐标分别为P(0,-1)和Q(1,0),将三角形 ABC相对直线L作对称变换后得到三角形 A′B′C′,按步骤列出变换矩阵,并计算三角形 A′B′C′各顶点的坐标值。
8 -1/3 5 4 -1 3 P1P2
1 2 3 4 5 6 7 8
5. 写出下图中多边形的边表(新边表)。
6 6 5 4 3 P (2,3) 2 2 1 0 P3(2,6) P4(5,5) P5(7,6) 5 4 3 P6(8,2) 2 1 0 5 -3 6 P3P4 2 0 6 8 -1/4 6 5 2 6 P2P3 P5P6
4. 写出|k|>1的直线Bresenham画线算法。
d
d
d d
4. 写出|k|>1的直线Bresenham 画线算法。
设直线方程为:y=kx+b,即 d x=(y-b)/k , 有 d xi+1=xi+(yi+1-yi)/k = xi+1/k, 其中k=dy/dx。 因为直线的 d 起始点在象素中心,所以误 差项d的初值d0=0。y下标每 d 增加1,d的值相应递增1/k, 即d=d+1/k。一旦d≥1,就 把它减去1,这样保证d在0、 1之间。
习题课
1. 列举计算机图形学的主要研究内容。 计算机中图形的表示方法、图形的计算、 图形的处理和图形的显示。 图形硬件、图形标准、图形交互技术、光 栅图形生成算法、曲线曲面造型、实体造 型、真实感图形计算与显示算法,以及科 学计算可视化、计算机动画、自然景物仿 真、虚拟现实等。
2. 常用的图形输出设备是什么?
用2d代替d的算法: void Midpoint Line (int x0,int y0,int x1, int y1,int color) { int a, b, d1, d2, d, x, y; a=y0-y1, b=x1-x0, d=a+2*b; d1=2*b, d2=2*(a+b); x=x0, y=y0; drawpixel(x, y, color); while (y<y1) { if (d<0) {x++, y++, d+=d2; } else {y++, d+=d1;} drawpixel (x, y, color); } /* while */ } /* mid PointLine */
(1) 平移坐标系原点到P(0,-1)点; 1 0 0 T1 0 1 1 0 0 1
(2) 关于直线y=x作对称变换; 0 1 0 T2 1 0 0 0 0 1 1 0 0 T (3) 恢复坐标轴平移。 3 0 1 1 0 0 1
M1
M2
Q
P2
M P(xp,yp)
增量计算: 若d0,取正上方象素P1(xp,yp+1),要判下一个象 素位置,应计算 d1=F(M1)=F(xp+0.5,yp+2)=a(xp+0.5)+b(yp+2)+c=d+b 增量为b。 若d<0,取右上方象素P2(xp+1,yp+1)。要判断再下 一象素,则要计算 d2=F(M2)=F(xp+1.5,yp+2)=a(xp+1.5)+b(yp+2)+c=d+a+b 增量为a+b。 d的初值d0=F(x0+0.5,y0+1)=F(x0,y0)+0.5a+b =0.5a+b
36 0 0
0 0 0 0 1 0 0 1
x y R y Rz z 1
0 2 0 1
算法二ቤተ መጻሕፍቲ ባይዱ以圆弧为基本图元
for(j=0;j<72;j++) { 绕Y轴逆时针旋转5度,
cos 36 0 Ry sin 36 0
4. 写出|k|>1的直线中点画线算法。
M1
M2
P1
Q M
P2
P(xp,yp)
4. 写出|k|>1的直线中点画线算法。
构 造 判 别 式 : d=F(M)=F(xp+0.5,yp+1)=a(xp+0.5) +b(yp+1)+c 当d<0,M在Q点左侧,取右上方 P2为下一个象素; P1 当d>0,M在Q点右侧,取上方P1 为下一个象素; 当d=0,选P1或P2均可,约定取 P1为下一个象素;
void Bresenhamline (int x0,int y0,int x1, int y1,int color) { int x, y, dx, dy; float k, e; dx = x1-x0, dy = y1-y0, k=dy/dx; e=-0.5, x=x0, y=y0; for (i=0; idy; i++) { drawpixel (x, y, color); y=y+1,e=e+1/k; if (e0) { x++, e=e-1;} } }
1 0 0 0 1 0 1 0 0 0 1 1 T T3 T2 T1 0 1 1 1 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1
其中变换矩阵:
cos 36 0 Ry sin 36 0
0 sin 1 0
36 0 36 0
0 cos
0 0 0 1
cos 36 sin Rz 36 0 0
sin cos
36