湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十
湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十。湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十湖南科技大学图形图像(王志喜)期末复习参考题往年必考题认真过一遍保底八十 ### 图形图像期末复习知识点详解 #### DDA算法与中点算法 1. **DDA算法**:直接数字式算法(Digital Differential Analyzer),是通过计算斜率并逐步累加来确定像素位置的一种方法。对于线段端点为(20, 20)和(28, 26),首先计算斜率\(m = \frac{y_2 - y_1}{x_2 - x_1} = \frac{26 - 20}{28 - 20} = \frac{6}{8} = 0.75\)。然后从起点出发,每次增加1个单位的x值,同时增加m个单位的y值直到终点。 - 示例代码: ```python def dda_line(x1, y1, x2, y2): dx = x2 - x1 dy = y2 - y1 steps = max(abs(dx), abs(dy)) xinc = dx / steps yinc = dy / steps x, y = x1, y1 for _ in range(steps): draw_pixel(int(x), int(y)) # 假设有一个函数可以绘制像素 x += xinc y += yinc ``` 2. **中点算法**:一种更高效的线段绘制方法,它通过判断每个像素的中点是否在线段上方还是下方来决定下一个像素的位置。对于同样的线段,中点算法可以避免浮点运算,提高效率。 - 示例代码: ```python def mid_point_line(x1, y1, x2, y2): dx = abs(x2 - x1) dy = abs(y2 - y1) sx = -1 if x1 > x2 else 1 sy = -1 if y1 > y2 else 1 err = dx - dy x, y = x1, y1 while True: draw_pixel(x, y) if x == x2 and y == y2: break e2 = 2 * err if e2 > -dy: err -= dy x += sx if e2 < dx: err += dx y += sy ``` #### OpenGL和GLUT图形程序设计 1. **填充的白色矩形**:使用OpenGL和GLUT库绘制一个填充的白色矩形。首先需要初始化GLUT库,设置窗口大小、颜色模式等。接着定义绘图函数,在函数中使用glBegin(GL_QUADS)和glColor3f(1.0, 1.0, 1.0)设置颜色为白色,并指定矩形的四个顶点。 - 示例代码: ```c++ void drawRectangle() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); // 设置颜色为白色 glBegin(GL_QUADS); glVertex2f(-0.8, -0.8); glVertex2f(-0.8, 0.8); glVertex2f(0.8, 0.8); glVertex2f(0.8, -0.8); glEnd(); glFlush(); } ``` 2. **填充的红色三角形**:同样地,可以使用OpenGL和GLUT绘制一个填充的红色三角形。设置颜色为红色,并指定三角形的三个顶点。 - 示例代码: ```c++ void drawTriangle() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); // 设置颜色为红色 glBegin(GL_TRIANGLES); glVertex2f(-0.8, -0.8); glVertex2f(0.8, -0.8); glVertex2f(0, 0.8); glEnd(); glFlush(); } ``` 3. **填充的蓝色平行四边形**:使用相同的原理,通过设置颜色为蓝色,并指定平行四边形的四个顶点来绘制。 - 示例代码: ```c++ void drawParallelogram() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0, 0.0, 1.0); // 设置颜色为蓝色 glBegin(GL_QUADS); glVertex2f(-0.9, -0.4); glVertex2f(0.4, -0.4); glVertex2f(0.9, 0.4); glVertex2f(-0.4, 0.4); glEnd(); glFlush(); } ``` 4. **填充的紫色梯形**:类似地,通过设置颜色为紫色,并指定梯形的四个顶点来绘制。 - 示例代码: ```c++ void drawTrapezoid() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.5, 0.0, 0.5); // 设置颜色为紫色 glBegin(GL_QUADS); glVertex2f(-0.9, -0.4); glVertex2f(0.4, -0.4); glVertex2f(0.4, 0.4); glVertex2f(-0.4, 0.4); glEnd(); glFlush(); } ``` #### 几何变换 1. **旋转变换矩阵**:对于旋转角为\(\theta\),旋转中心为\((x_0, y_0)\)的情况,旋转变换矩阵可表示为: \[ \begin{pmatrix} \cos\theta & -\sin\theta & (1-\cos\theta)x_0 + \sin\theta y_0 \\ \sin\theta & \cos\theta & (1-\cos\theta)y_0 - \sin\theta x_0 \\ 0 & 0 & 1 \end{pmatrix} \] 2. **缩放变换矩阵**:对于缩放系数为\(s_x\)和\(s_y\),固定点位置为\((x_0, y_0)\)的情况,缩放变换矩阵可表示为: \[ \begin{pmatrix} s_x & 0 & (1-s_x)x_0 \\ 0 & s_y & (1-s_y)y_0 \\ 0 & 0 & 1 \end{pmatrix} \] 3. **带缩放的旋转变换矩阵**:对于旋转角为\(\theta\),缩放系数均为\(s\),旋转中心和固定点位置均为\((x_0, y_0)\)的情况,变换矩阵可表示为: \[ \begin{pmatrix} s\cos\theta & -s\sin\theta & (1-s\cos\theta)x_0 + s\sin\theta y_0 \\ s\sin\theta & s\cos\theta & (1-s\cos\theta)y_0 - s\sin\theta x_0 \\ 0 & 0 & 1 \end{pmatrix} \] 4. **坐标变换矩阵**:对于新坐标系统的原点位置定义在旧坐标系统的\(P_0\)处,新的\(x\)轴或\(y\)轴为\(P_0P_1\)的情况,可以通过构建旋转和平移矩阵来实现坐标变换。 5. **投影变换矩阵**:对于投影向量\(\vec{V}\)和投影面的情况,可以构建相应的投影变换矩阵。 以上知识点涵盖了图形图像课程中的基本算法和图形程序设计方法,通过深入理解这些概念,能够帮助学生更好地准备期末考试。
- 粉丝: 1800
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助