计算机图形学复习题Word文档格式.docx
- 文档编号:19172039
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:312.21KB
计算机图形学复习题Word文档格式.docx
《计算机图形学复习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机图形学复习题Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
insideFlag=!
insideFlag;
if(insideFlag)putpixel(x,y,color);
}
}
#include<
graphics.h>
main()
{intgd=DETECT,gm,color=RED;
intx,y,r;
scanf("
%d%d%d"
&
x,&
y,&
r);
initgraph(&
gd,&
gm,"
d:
\\turboc2"
);
setbkcolor(BLUE);
setcolor(color);
circle(x,y,r);
edgeMarkFill(x,y,r,color);
getch();
closegraph();
方法二:
扫描圆弧时直接填充
circleFill(intx0,inty0,intr,intcolor){
intx,y,x1;
floatd;
x=0;
y=r;
d=1.25-r;
while(x<
y){
for(x1=x0-x;
x1<
=x0+x;
x1++)
putpixel(x1,y+y0,color);
for(x1=x0-y;
=x0+y;
putpixel(x1,x+y0,color);
putpixel(x1,-y+y0,color);
putpixel(x1,-x+y0,color);
if(d<
0){d+=2*x+3;
x++;
}
else{d+=2*(x-y)+5;
y--;
circleFill(x,y,r,color);
3.6、编写一个程序实现绘制三个像素宽的斜率在0~1之间的点划线。
voidMidpointLine(intx0,inty0,intx1,inty1,intcolor){
inta,b,d1,d2,d,x,y;
intpattern[32]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,1,1,0,0,0,0,0,0},i=0;
a=y0-y1;
b=x1-x0;
d=2*a+b;
d1=2*a;
d2=2*(a+b);
x=x0;
y=y0;
while(x<
=x1){
if(pattern[i%32]){
putpixel(x,y+1,color);
putpixel(x,y,color);
putpixel(x,y-1,color);
if(d<
0){x++;
y++;
d+=d2;
else{x++;
d+=d1;
i++;
main(){
intx0,y0,x1,y1;
floatk;
intgdriver=DETECT,gmode;
%d%d%d%d"
x0,&
y0,&
x1,&
y1);
if(x0==x1||(y1-y0)/(x1-x0)>
1||(y1-y0)/(x1-x0)<
0)
printf("
InputError!
"
);
else{initgraph(&
gdriver,&
gmode,"
if(x1<
x0){
intt;
t=x0;
x0=x1;
x1=t;
t=y0;
y0=y1;
y1=t;
MidpointLine(x0,y0,x1,y1,WHITE);
getch();
closegraph();
3.9、根据过取样中的简单平均方法,结合一个直线扫描转换算法,编写一个反走样的直线扫描转换算法。
#defineW640
#defineH480
intbuffer[2*W][2*H];
for(x=0;
x<
2*W;
for(y=0;
2*H;
buffer[x][y]=BLACK;
x0*=2;
x1*=2;
y0*=2;
y1*=2;
buffer[x][y]=color;
W;
H;
y++){
intc=buffer[2*x][2*y]+buffer[2*x+1][2*y]+
buffer[2*x][2*y+1]+buffer[2*x+1][2*y+1];
putpixel(x,y,c/4);
4.1、对于三次参数曲线,如果已知两个端点的位置矢量及二阶导数矢量,试求出相应的调和函数和系数矩阵M。
设曲线方程为:
4、给定四点P1(0,0,0),P2(1,2,1),P3(2,-3,-1),P4(3,0,2),用其作为特征多边形来构造一条三次Bezier曲线,并计算曲线上参数为1/3的点。
递推分割法求t=1/3处的点:
或根据定义求t=1/3处的点:
8.如图5.24所示,在5.3.6节中,将三棱锥ABCD绕过Q(2,2,2)与x轴平行的直线逆时针方向旋转90°
,写出变换矩阵。
(3)将坐标系平移回原来的位置:
因此复合变换矩阵:
变换后的三棱锥:
实验一:
直线的画法
#include<
stdio.h>
intx0,y0,x1,y1,t;
gmode,“c:
\\tc\\bgi"
if(x0==x1)LineV(x0,y0,y1,WHITE);
else{if(x1<
x0)
{t=x0;
t=y0;
}
k=(float)(y1-y0)/(x1-x0);
if(k>
=0&
k<
1)MidpointLine1(x0,y0,x1,y1,WHITE);
elseif(k<
0&
k>
=-1)MidpointLine2(x0,y0,x1,y1,WHITE);
elseif(k>
1)MidpointLine3(x0,y0,x1,y1,WHITE);
elseMidpointLine4(x0,y0,x1,y1,WHITE);
voidMidpointLine1(intx0,inty0,intx1,inty1,intcolor){
putpixel(x,y,color);
x1){
putpixel(x,y,color);
voidMidpointLine2(intx0,inty0,intx1,inty1,intcolor){
d=2*a-b;
d2=2*(a-b);
voidMidpointLine3(intx0,inty0,intx1,inty1,intcolor){
d=a+2*b;
d1=2*b;
0){y++;
voidMidpointLine4(intx0,inty0,intx1,inty1,intcolor){
d=a-2*b;
d1=-2*b;
else{y--;
实验二:
Beizer曲线的生成算法
main()
{
gmode,"
\\tc2"
floatcontrol[2][4];
floatpoints[2][1000];
inti,np=1000;
printf("
InputControlPoint:
for(i=0;
i<
4;
i++)
scanf("
%f%f"
control[0][i],&
control[1][i]);
bzeierCasteljau(4,np,control[0],points[0]);
bzeierCasteljau(4,np,control[1],points[1]);
np;
putpixel(points[0][i],points[1][i],WHITE);
closegraph();
floatCasteljau(intn,floatc[],floatt)
intk,i;
floatt1=1-t,csa[10];
=n;
csa[i]=c[i];
for(k=1;
k++)
for(i=0;
=n-k;
csa[i]=t1*csa[i]+t*csa[i+1];
returncsa[0];
voidbzeierCasteljau(intn,intnpoints,floatc[],floatp[])
floatt=0,delt=1.0/npoints;
=npoints;
p[i]=Casteljau(n,c,t);
t+=delt;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 复习题