一 请给出全象限整型Bresenham直线段生成算法的C语言描述。(20分)
二 构造空间变换T,使过原点的任意轴(A,B,C)与Y轴正向对齐。
变换次序为先绕X轴顺时针旋转,再绕Z轴逆时针旋转。 (20分)
三 简述画家消隐算法的基本原理,并给出处理流程框图。 (20分)
四 已知二维空间窗口为(Wleft, Wbotton)---(Wright, Wtop), 空间裁剪采用端点编码
方式实现,请给出您的端点编码设计方案及空间任意点(x,y)的编码C函数:
int pCode(int x, int y) 描述。
假设已知直线段P1P2的两端点编码分别为P1code和P2code,请问直线段
完全可见的充要条件是什么?完全不可见的充分条件是什么?部分可见的
分条件又是什么?并给出相应的C描述。 (20分)
五 已知由空间两特征多边形P1(0,0,0), P2(2,2,-2), P3(2,-1,-1), P4(4,0,0)和
Q1(4,0,0), Q2(6,-2,1), Q3(8,-3,2), Q4(10,0,1)确定两段三次Bezier曲线。
请给出两段曲线在分段点P4(Q1)处达到G1连续的解析条件。 (20分)
答案:
一、void Bline(int x1, int y1, int x2, int y2)
{
int x, y, dx, dy, temp, xSign, ySign, interchange;
interchange = 0;
x = x1; y = y1;
dx = abs(x2 – x1);
dy = abs(y2 – y1);
xSign = (x2 > x1) ? 1 : -1;
ySign = (y2 > y1) ? 1 : -1;
if (dy > dx) {
interchange = 1;
temp = dx; dx = dy; dy = temp; }
e = 2*dy – dx;
for ( i = 0; i < dx; i++) {
putpixel(x, y, 15);
if (e > 0 ) {
if (interchange) x += xSign;
else y += ySign;
e = e – 2*dx;
}
if (interchange) y += ySign;
else x += xSign;
e = e + 2*dy;
}
}
二、
1 0 0 0 V A 0 0
T1 = 0 B/V -C/V 0 T2 = -A V 0 0
0 C/V B/V 0 0 0 1 0
0 0 0 1 0 0 0 1
V =
三、画家消隐算法的基本原理: 如同画家绘画一样,从远景开始逐步绘制到近景。这样后绘的近景部分就会覆盖先绘的远景部分,达到消隐的目的。
处理流程框图:
两三角形排序开始
两三角形排序
开始
收集可见面 XY极大 Y
收集可见面
极小检验
三角剖分
三角剖分
排序 Z 极大 Y
排序
三角形排序 极小检验
三角形排序
N Y
输出绘制 相交边检验
输出绘制
交点处比较深度 结束 三角形
交点处比较深度