计算机图形学实验报告
0900213 38 8 郭佩佩
实验
建立计图实验环境 1. 实验目 体现面象程序设计思想实验采基 Visual C 十十集成环境 MFC 编程方法开发 windows 应程序角度建立菜单交互式绘图基环境续实验基础
2. 实验容 1)
建立菜单交互式绘图基环境工程文件 Vcad运行图:
2)绘图菜单拉子菜单菜单项:
直线
弹性线方法输入直线起止点调 bresenham 算法换原
movetolineto 算法画直线
圆圆弧
该菜单选择分画圆圆弧
直线段裁剪 输入矩形域左角右角产生裁剪区域然输入干条直线段矩形域作裁剪域裁剪
面区填充
输入边形干顶点调面区填充算法边形域部填充
贝塞尔曲线 输入四顶点调三次贝塞尔曲线生成算法生成贝塞尔曲线
实验二
园园弧绘制算法
1 实验目 通园椭圆弧生成算法机调试掌握:
1)
VC++图形函数方法 2)
圆椭圆弧生成原理
2.实验容 1)函数形式编写圆生成算法然 VCAD 绘图系统中绘图圆子菜单找合适程序修改点实验求编写画圆算法插入工程文件中通调试验证编写画圆算法正确性
2)
函数形式编写角度 DDA 椭圆弧生成算法然 VCAD 绘图系统中绘图圆弧子菜单找合适程序修改点实验求编写画圆弧算法插入工程文件中通调试验证编写画圆弧算法正确性
Arc(int xcint ycdoubli rdouble tsdouble te) {
double radts1teldegdtetactst
int xynI
rad00174533
tslts*rad
telte*rad
if(r508)
deg0015
else
if(r762)
deg006
else
if(r254)
deg0075
else
deg015
dtedeg*254r
if(teltsl)
tel+628319
n(int)((teltsl)dte+05) if(n0)
n(int)(628319dte+05)
tatsl
xxc+r*cos(tsl)
yyc+r*sin(tsl)
moveto(xy)
for(i1ini+++)
{ ta+dte ctcos(ta) stsin(ta) xxc+r*ct yyc+r*st lineto(xy) }
xxc+r*cos(tel)
yyc+r*sin(tel)
lineto(xy)
return(0) }
实验三
直线裁剪( 编码裁剪算法)
1. 实验目 通编码裁剪算法设计调试解二维线段裁剪程提高程序设计力机调试力达理实践机结合目注:实验已运行中点裁剪算法作参考实例做实验时中点裁剪算法换编写编码裁剪算法
2. 实验容 1)
函数形式编写编码裁剪算法相关子算法
Var xlxrybytreal procedure clip(x1y1x2y2real) labelreturn type edge(LRBT)
outcodeset of edge Var cc1c2outcodexyreal Procedure
code(xyrealVar
coutcode)
Begin c[ ]
If xxl then c[L]
Else if xxr then c[R]
If yyb then cc+[B]
Else if yyt then cc+[T]
End {end of code} Begin {main}
Code(x1y1c1)code(x2y2c2) While (c1[]) or (c2[]) do
Begin
if c1*c2[] then return{显然见}
cc1if c[] then cc2
If L in c then begin
xxlyend{左边界求交}
If R in c then begin
xxryend {右边界求交}
If B in c then begin
xyyb end {底边界求交}
If T in c then begin
xyyt end {顶边界求交} If cc1 then begin
x1xy1y
code(xyc1) end
Else begig
x2xy2y
code(xyc2) end End{End of while} Line(x1y1x2y2)
Return end {end of clip}
2)
交互产生矩形裁剪框输入斜率直线段始终点先画出直线段然调裁剪算法画出裁剪保留见线段部分
3)
VCAD 绘图系统中绘图直线裁剪子菜单找合适修改点实验求编写编码裁剪算法换掉工程文件中中点裁剪算法通调试验证编写编码裁剪算法正确性
实验四
面区填充(YX 算法)
1. 实验目 通 YX 面区填充算法调试掌握:
1)
边形面区填充算法数组织 2)
利相关性提高算法效率 3)
奇异点处理方法 4)
提高程序设计力
2. 实验容 1)
函数形式编写 YX 面区填充算法 2)
VCAD 绘图系统中绘图面区填充子菜单找合适修改点实验求编写面区填充算法插入工程文件中通调试验证编写面区填充算法正确性操作时鼠标交互出边形干顶点画出边形然调编写 YX 面区填充算法填充选颜色填充边形
实验五
贝塞尔曲线生成算法设计调试
实验目 掌握曲线曲面数学理基础通调试绘制 Bezier 曲线加深学 数学理理解通二条 Bezier 曲线拼接设计掌握曲线拟合方法
二容求
3
1三次 Bezier 曲线公式:P(t)P i
B i3 (t)
出发编写生成 Bezier
i0 曲线程序求:
a)
鼠标输入特征边形四点然调 Bezier 曲线生成算法绘出曲线
b)
重复步 34 遍验证编写算法正确性
typedef cptype float[4][4] float cc (int nint i) 计算 n(i(ni))
{int j
float a
a1
for(ji+1jnj++) a*j
for(j2jnij++) aj
return a
}
float b_lend(Int iint nfloat t2) 计算 B in (t)
{float v
vcc(ni) for(j 1jij++) v*t2
for(j1jnij++) v*(1t2)
return v
} void bezier(float x0float y0float z0float t0int ncptype cp2)定 t0计算 f(t0) {int i
float b1g
for(i0ini++) {b1b_lend(int0)
x0x0+cp2[i1]*b1 y0y0+cp2[i2]*b1 z0z0+cp2[i3]*b1 }} void draw_curv(int kcptype cp1) t 分成 k 等份循环迭代绘出曲线
{int ijx1y1z1
float xyzdelt
delt10k
t0
for(i1iki++)
{xyz0
bezier(xyzt3cp1)
if(t0) moveto(xy)
else lineto(xy)
t+delt }}
2特征边形改五控制点修改程序绘出四次曲线
3实现二条三次 Bezier 拼接连接点处保持阶连续
实验结:
实验程辛苦特处理量数量时变量容易出错需极耐心计算时例DDA 算法画圆时需强制类型转换数遗漏导致程序出许奇怪错误调试久发现外贝塞尔曲线算法编写中数学函数调复杂常常翻阅 API 文档
困难该图形系统熟悉导致处理鼠标操作时遇难题仔细解决
通次实验整图形系统较透彻解时数学函数次加深印象更重掌握许实计算机图形学算法 MFC 提升
次实验中积累验软件开发中受益匪浅
2021 年 1 月 3 日
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档