计算机图形学第一次作业
计算机X班XXX 1XXX010XXX
1.你是否想用图形学的有关知识去解决一两个实际问题?你想解决的问题是什么?考虑如何解决?
答:我希望可以解决的有设计汽车外壳和制作动画。
解决方法:(1)汽车外壳
使用3D MAX/AutoCAD软件进行设计。
(2)制作动画
利用动画制作软件(3D MAX)在计算机上制作动画
2.某彩色图形显示系统,CRT显示器的分辨率为1024×1024,它可以从2^17次方种颜色中选择出2^15次方来显示,其帧缓冲器的容量应该如何计算?查色表的长度和宽度应为多少?
解:16b==2B
因为分辨率为1024x1024
所以1024*1024*2B=2MB
3.采用Bresenham画线算法,绘出起点(1,3),终点为(9,18)的直线段。
解:
void DrawBresenhamline(int x0, int y0, int x1, int y1)
{
int dx = x1 - x0;//x偏移量
int dy = y1 - y0;//y偏移量
int ux = dx >0 ?1:-1;//x伸展方向
int uy = dx >0 ?1:-1;//y伸展方向
int dx2 = dx <<1;//x偏移量乘2
int dy2 = dy <<1;//y偏移量乘2
if(abs(dx)>abs(dy))
{//以x为增量方向计算
int e = -dx; //e = -0.5 * 2 * dx,把e 用2 * dx* e替换
int x = x0;//起点x坐标
int y = y0;//起点y坐标
for (x = x0; x < x1;x+=ux)
{
printf ("%d,%d\n",x, y);
e=e + dy2;//来自2*e*dx= 2*e*dx + 2dy (原来是e = e + k)
if (e > 0)//e是整数且大于0时表示要取右上的点(否则是右下的点)
{
y += uy;
e= e - dx2;//2*e*dx = 2*e*dx - 2*dx (原来是e = e -1)
}
}
}
else
{//以y为增量方向计算
int e = -dy; //e = -0.5 * 2 * dy,把e 用2 * dy* e替换
int x = x0;//起点x坐标
int y = y0;//起点y坐标
for (y = y0; y < y1;y += uy)
{
printf ("%d,%d\n",x, y);
e=e + dx2;//来自2*e*dy= 2*e*dy + 2dy (原来是e = e + k)
if (e > 0)//e是整数且大于0时表示要取右上的点(否则是右下的点)
{
x += ux;
e= e - dy2;//2*e*dy = 2*e*dy - 2*dy (原来是e = e -1)
}
}
}
}
DrawBresenhamline(1, 3, 9, 18);
4.用中点画圆法生成圆心在(3,-2),半径为12的上半个半圆。
解:
cen = [3 0];
r = 3;
t = linspace(0, 2*pi);
x = cen(1) + r*cos(t);
y = cen(2) + r*sin(t);
y(y<0) = NaN;
figure; box on; hold on;
plot(x, y, 'r-');
axis equal;
plot([min(x), max(x)], [0 0], 'k-');。