【计算机图形学】期末考试知识点汇总

news2024/12/24 3:04:47

文章目录

  • 第一章计算机图形学概述
    • 计算机图形学的定义
    • 计算机图形学的应用
    • 计算机图形学 vs 图像处理 vs模式识别
    • 图形显示器的发展及工作原理
    • 理解三维渲染管线
  • 第二章 基本图元的扫描转换
    • 扫描转换
    • 直线的扫描转换
    • DDA算法
    • Bresenham算法
    • 中点画线算法
    • 圆的扫描转换
    • 中点画圆算法
    • 反走样
  • 第三章 多边形填充
    • 概念
    • 有效边表填充
    • 边缘填充
    • 种子填充算法

第一章计算机图形学概述

计算机图形学的定义

定义:计算机图形学是一门研究怎样用计算机表示生成处理显示图形的学科。


分类:

  • 几何图形:基于线框模型 描述
  • 真实感图形:基于表面模型 描述

在这里插入图片描述


图形表示方法:

  • 参数法
  • 点阵法

计算机图形学就是研究 将图形的表示法从参数法转换到点阵法 的一门学科。


图形学之父:Ivan E. Sutherland


单选:计算机图形学与计算机图象学的关系是(B)

A.计算机图形学是基础,计算机图象学是其发展

B.不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分

C.同一学科在不同场合的不同称呼而已

D.完全不同的学科,两者毫不相干


计算机图形学的应用

应用领域内容
计算机游戏计算机游戏的核心技术来自于计算机图形学,如多分辨率地形生成、天空盒纹理、角色动画、碰撞检测、粒子系统、自然景物模拟、交互技术、实时绘制等。计算机游戏是计算机图形学发展的一个重要推动力。
计算机辅助设计计算机辅助设计(Computer Aided Design,CAD)和计算机辅助制造(Computer Aided Manufacture,CAM)是计算机图形学最早应用的领域,也是当前计算机图形学最成熟的应用领域,典型的代表产品为AutoCAD系统软件。现在建筑、机械、飞机、汽车、轮船、电子器件等产品的开发几乎都使用AutoCAD进行设计。Autodesk公司出版的另外两个三维建模、动画和渲染软件是3ds max和Maya,前者主要用于建筑物建模,后者主要用于角色建模。
计算机艺术计算机图形学广泛应用于美术设计中,称为计算机艺术。动画设计是其典型代表。动画是计算机艺术的典型代表。根据人眼的视觉暂留特性,将一系列的单幅静态画面(frame,帧)串接在一起,以24-30帧/秒的速度播放,形成运动的效果。
虚拟现实虚拟现实(virtual reality,VR)技术是利用计算机生成虚拟环境,逼真地模拟人在自然环境中的视觉、听觉、运动等行为的人机交互的新技术。借助于一些特殊设备,如数据手套、头盔显示器等,用户可以“沉浸”到该环境中。在虚拟现实中,感受到的是虚拟环境设备反馈的作用力,从而产生身临其境的感觉。
计算机辅助教学计算机辅助教学是利用计算机图形学技术展示抽象原理或不可见过程的一种新的教学方法。在多媒体教室,教师使用集图、文、声、像为一体的多媒体课件进行教学,有助于学生理解和接受深奥枯燥的理论。

单选:下面哪一项不属于计算机图形学的应用范围?(B)

A.计算机动画

B.从遥感图像中识别道路等线划数据

C.三维可视化技术

D.影视三维动画制作


判断题:分形技术在自然景物的模拟中发挥了重要作用。(正确)


判断题:虚拟现实技术属于计算机图形学的应用范围。(正确)


简答题:请简述计算机图形学的应用领域有哪些?请列举三个以上的应用领域。

答:

计算机图形学已经在游戏、电影、科学、艺术、商业、广告、教学、培训和军事等领域获得了广泛的应用。

应用领域包括但不限于:

  • 计算机游戏
  • 计算机动画
  • 计算机辅助设计与辅助制造
  • 计算机辅助教学
  • 虚拟现实

计算机图形学 vs 图像处理 vs模式识别

  • 计算机图形学:从抽象数据到图像的过程,主要用于图像的生成和渲染。
  • 图像处理:是在图像已经存在的基础上,通过算法对其进行加工和改善,改进图像质量或提取信息。
  • 模式识别:从图像出发,试图理解图像内容并将其转换为抽象的描述,是一种从图像到数据的过程。

计算机图形学的研究内容不包括:图像处理和模式识别


图形显示器的发展及工作原理


判断题:CRT由四部分组成:电子枪、聚焦系统、偏转系统和荧光屏。(正确)


  • 光栅扫描显示器:画点设备,即点阵单元发生器,并可控制每个点阵单元的亮度,这些点阵单元被称为像素。
  • 帧缓冲存储器(显存):帧缓冲中单元数目与显示器上的像素数目相同,而且单元与像素一一对应。要在屏幕上显示图像,首先要把图像信息写入帧缓冲,然后光栅扫描显示器访问帧缓冲,再把其中的内容显示到屏幕上。

备注:帧缓冲单元的数值决定了显示器像素的颜色。显示器颜色的种类与帧缓冲中每个单元的位数有关。

在这里插入图片描述


  • 1 个位面:每个像素的颜色只用一位(Bit)表示(其值非0即1),此时屏幕只能显示黑白二色图像,称为黑白显示器
  • 8个位面:每个像素的颜色用一个字节(Byte)表示,帧缓冲器需要用八个位面,可表示 2 8 2^{8} 28 种灰度,称为灰度显示器。
  • 24个位面:每个像素用R、G、B三原色混合表示,其中每种原色分别用一个字节表示,各对应一把电子枪,每种颜色可有256种亮度,三种颜色的组合是 2 24 2^{24} 224 颜色。

问题:对于分辨率为1024*1024的光栅系统,若每一像素用8位和12位二进制来表示存储信息,各需多大光栅存储容量以及显存?每一屏幕最多能显示多少颜色?若R,G,B灰度都占8位,其显示颜色的总数是多少?

答:

8位表示

  • 每个像素用8位(1字节)来表示。
  • 分辨率为1024*1024,即总共有1024 * 1024 = 1,048,576个像素。
  • 因此,总存储容量为1,048,576字节(即1,048,576 * 8位 = 8,388,608位)。
  • 在8位表示下,每一屏幕最多能显示的颜色数为 2 8 = 256 2^8 = 256 28=256种颜色。

12位表示

  • 每个像素用12位来表示。
  • 分辨率为1024*1024,即总共有1024 * 1024 = 1,048,576个像素。
  • 总存储容量为1,048,576 * 12位 = 12,582,912位,转换为字节为12,582,912 / 8 = 1,572,864字节。
  • 在12位表示下,每一屏幕最多能显示的颜色数为 2 12 = 4096 2^{12} = 4096 212=4096种颜色。

R,G,B各占8位时的颜色总数

  • R、G、B每种颜色有256种亮度(即 2 8 2^8 28种)。
  • 三种颜色组合的总颜色数为 2 8 ∗ 2 8 ∗ 2 8 = 2 24 = 16 , 777 , 216 2^8 * 2^8 * 2^8 = 2^{24} = 16,777,216 282828=224=16,777,216种颜色。

单选题:分辨率为 1024×1024 的显示器,需要多少位面数为8的帧缓存(A)

A.1M

B. 2M

C. 3M

D.4M

解析:

  • 分辨率为1024×1024的显示器意味着总共有1024 * 1024 = 1,048,576个像素点。
  • 如果每个像素点需要8位(即1字节)来表示其颜色信息,那么总共需要的字节数为1,048,576字节。
  • 由于1M(兆)字节等于1,048,576字节,因此需要的帧缓存大小为1M字节。

单位换算:

  • 1字节 = 8位
  • 1兆字节(MB)= 1,048,576字节 = 2 20 2^{20} 220字节

单选题:分辨率为1024×1024的显示器各需要多少位面数为16的帧缓存(B)

A.1M

B. 2M

C. 3M

D.512K

解析:

  • 分辨率为1024×1024的显示器意味着总共有1024 * 1024 = 1,048,576个像素点。
  • 如果每个像素点需要16位来表示其颜色信息,那么总共需要的位数为1,048,576像素 * 16位/像素 = 16,777,216位。
  • 将位数转换为字节数(因为1字节 = 8位),所需的字节数为16,777,216位 / 8 = 2,097,152字节。
  • 由于1M字节等于1,048,576字节,所以2,097,152字节等于2M字节。因此,需要的帧缓存大小为2M字节。

理解三维渲染管线

三维渲染管线:将三维场景转化为二维图像的过程,涉及以下阶段:

  1. 应用程序阶段

    • 任务:处理场景中的对象,包括它们的几何形状、位置、动画、物理效果等。
    • 输出:将场景中需要渲染的几何体(图元)及其属性(如摄像机位置、光照条件)输出到下一个阶段。
  2. 几何阶段

    • 模型视点变换:将模型从局部坐标系转换到世界坐标系,再从世界坐标系转换到观察者(摄像机)坐标系。
    • 顶点着色:计算顶点的光照效果,为后续的光栅化阶段提供必要的颜色信息。
    • 投影:将三维场景投射到二维视平面上,涉及透视投影或正交投影。
    • 裁剪:移除那些完全不在视野内的图元,减少后续阶段的计算量。
    • 屏幕映射:将裁剪后的图元映射到屏幕坐标系,为光栅化阶段准备。
  3. 光栅化阶段

    • 任务:将几何阶段处理后的图元转换为屏幕上的像素点,涉及插值计算(如深度、颜色、纹理坐标等)。
    • 输出:最终渲染的二维图像,包括确定哪些像素属于哪个图元,以及这些像素的具体颜色和属性。

选择题:三维渲染管线实现计算机内一个三维模型从数据到图像的转换过程。该过程包括下面的步骤,请按渲染管线的流程,选择合适的处理步骤填入空(1)~ 空(6)

三维模型加载➡️空(1)➡️空(2) ➡️ 空(3)➡️ 空(4)➡️空(5)➡️ 空(6)➡️显示在显示器上

  • A. 观察变换
  • B. 模型变换(三维几何变换)
  • C. 投影变换
  • D. 消隐
  • E. 光栅化(扫描转换)
  • F. 计算顶点光照(颜色)

答案:B A C D F E


过取样:在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。实际上是把显示器看成是比实际更细的网格来增加取样率。


单选题:在Windows中,绘图一般在视图窗口的客户区进行,使用的是MFC的设备上下文类( B )中的各种绘图函数。

A.MFC

B. CDC

C. DEC

D. PDC


单选题:MFC中的绘图一般在视图类的(屏幕/打印机)绘图消息响应函数( D )中进行。

A.paint

B. main

C. OnPaint

D.OnDraw


简答题:请简述三维渲染管线的处理流程。

答:

三维渲染管线,用于将三维场景转换为二维图像,主要有以下处理流程:

  1. 应用程序阶段:处理场景中的各种对象,包括它们的几何形状、位置、动画和物理效果等,最终输出场景中需要渲染的几何体(图元)及其相关属性,如摄像机位置和光照条件。

  2. 几何阶段:模型视点变换,将模型从局部坐标系转换到世界坐标系,然后转换到观察者(摄像机)坐标系。接着进行顶点着色,计算顶点的光照效果。之后是投影,将三维场景投射到二维视平面上,裁剪步骤移除那些完全不在视野内的图元,最后屏幕映射将裁剪后的图元映射到屏幕坐标系,为光栅化阶段做准备。

  3. 光栅化阶段:将几何阶段处理后的图元转换为屏幕上的像素点,涉及到插值计算,如深度、颜色、纹理坐标等。最终输出是渲染的二维图像,


第二章 基本图元的扫描转换

扫描转换

  • 概念:确定最佳逼近图形的像素集合,并用指定属性写像素的过程称为图形的扫描转换,也称为光栅化。
  • 作用:将矢量图形转换为像素阵列,以在光栅图形显示器上显示。

单选题:多边形扫描转换可以将( A )。

A.多边形由顶点表示转换成点阵表示

B. 多边形由区域表示转换成边界表示

C.多边形转换为显示器的扫描线

D.多边形的填充属性改变


简答题:请简述什么是扫描转换?

答:

确定最佳逼近图形的像素集合,并用指定属性写像素的过程称为图形的扫描转换或光栅化。


直线的扫描转换

定义:在帧缓冲器有限的像素中,寻找一组能最接近真实直线的像素点,对这些像素进行写操作。


直线的斜截式方程如下:

y = k x + b y = kx + b y=kx+b

其中:

  • k k k —— 直线的斜率
  • b b b —— 直线在 y y y轴的截距

给定两点 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2),则直线的斜率 k = y 2 − y 1 x 2 − x 1 k = \frac{y_2 - y_1}{x_2 - x_1} k=x2x1y2y1,其中主位移 Δ \Delta Δ 定义为:

Δ = max ⁡ ( Δ x , Δ y ) \Delta = \max(\Delta x, \Delta y) Δ=max(Δx,Δy)

在直线扫描转换过程中,根据主位移方向执行加 1 1 1或者减 1 1 1操作,以确定直线上的像素点。


DDA算法

已知过端点 ( x 1 , y 1 ) (x1, y1) (x1,y1) ( x 2 , y 2 ) (x2, y2) (x2,y2) 的直线段 y = k x + b y=kx+b y=kx+b,斜率 k k k y 2 − y 1 x 2 − x 1 \frac{y_2 - y_1}{x_2 - x_1} x2x1y2y1

DDA算法

  • ∣ k ∣ ≤ 1 |k| \le 1 k1:当 x x x每递增 1 1 1 y y y 递增 k k k (即直线斜率)
  • ∣ k ∣ > 1 |k| > 1 k>1:当 y y y每递增 1 1 1 x x x 递增 k k k (即直线斜率)

大题:请用DDA直线扫描转换算法,计算(0,0)(6,4)直线上的点,将下面的表格填写完整:

xy
00
【】【】
【】【】
【】【】
【】【】
【】【】
64

答:

对于直线(0,0)到(6,4),我们首先计算斜率 k k k

  • k = y 2 − y 1 x 2 − x 1 = 4 − 0 6 − 0 = 2 3 k = \frac{y_2 - y_1}{x_2 - x_1} = \frac{4 - 0}{6 - 0} = \frac{2}{3} k=x2x1y2y1=6040=32

由于 ∣ k ∣ ≤ 1 |k| \le 1 k1,我们将从 ( x 1 , y 1 ) = ( 0 , 0 ) (x1, y1) = (0, 0) (x1,y1)=(0,0) 开始,每次 x x x 递增 1 1 1 y y y 递增 k k k,直到 x = x 2 x = x2 x=x2

计算过程中, y y y 的值需要四舍五入到最近的整数。

xy
00
11
21
32
43
53
64

解释:

  • ( 0 , 0 ) (0, 0) (0,0) 开始。
  • 每次 x x x 递增 1 1 1 y y y 递增 k = 2 3 k = \frac{2}{3} k=32
  • y y y 的值在每一步都四舍五入到最近的整数。

单选题:直线DDA算法,当斜率m<1时,x方向的增量△x和y方向的增量△y分别是?( C )

A. ±m 和 ±1

B. ±1 和 ±1/m

C. ±1 和 ±m

D. ±1/m 和 ±1


判断题:在DDA算法中,当斜率大于1时,则y方向为主步进方向。(正确)


Bresenham算法

Bresenham 算法的基本思想:主位移方向每次递增一个像素,另一个方向的增量是 0 0 0 1 1 1 ,取决于像素点与理想直线的距离。这个距离称之为误差项,用 d d d 表示

x x x 主位移方向为例, x i + 1 = x i + 1 x_{i+1} = x_i + 1 xi+1=xi+1,则:

y i + 1 = { y i + 1 ,    ( d ≥ 0.5 ) y i ,    ( d < 0.5 ) y_{i+1} = \begin{cases} y_i + 1, ~~ (d \ge 0.5) \\ y_i, ~~ (d < 0.5) \end{cases} yi+1={yi+1,  (d0.5)yi,  (d<0.5)

e i + 1 = d i + 1 − 0.5 e_{i+1} = d_{i+1} - 0.5 ei+1=di+10.5,则:

y i + 1 = { y i + 1 ,    ( e ≥ 0 ) y i ,    ( e < 0 ) y_{i+1} = \begin{cases} y_i + 1, ~~ (e \ge 0) \\ y_i, ~~ (e < 0) \end{cases} yi+1={yi+1,  (e0)yi,  (e<0)


单选题:Bresenham直线扫描转换法中,从理想直线到位于直线上方的像素的距离为t,到位于直线下方的像素的距离为s,s-t>=0的时候,选择如下哪个点?(A)

A.直线上方的点

B. 直线下方的点

C.理想直线上的点

D.不确定


整数化的 bresenham 算法描述如下:

int e = -dx;
for(i = 0; i <= dx; i++) {
    drawpixel(x, y, color);
    x++;
    e += 2 * dy;
    if(e >= 0) {
        y++;
        e -= 2 * dx;
    }
}

也就是说, e e e 初始化为 − Δ x - \Delta x Δx,然后循环 Δ x \Delta x Δx 次,其中每次:

  • x x x 都是加 1 1 1 e e e 2 Δ y 2\Delta y y
  • 一旦 e ≥ 0 e \ge 0 e0 了, y y y 就可以加 1 1 1,然后将 e e e 减掉 2 Δ x 2 \Delta x x

单选题:使用 Bresenham 直线扫描转换法,绘制直线段 P 0 ( 0 , 0 ) P_0(0,0) P0(0,0) —— P 1 ( 5 , 2 ) P_1(5,2) P1(5,2),在 x = 3 x=3 x=3 时, y y y 应该是?(A)

A.1

B. 0

c. 2

D. 3

解析:

根据上面【整数化的 bresenham 算法代码描述】,我们将数值代入,很容易计算出答案。

在这里插入图片描述

首先,我们需要确定 Δ x \Delta x Δx Δ y \Delta y Δy 的值。对于直线段 P 0 ( 0 , 0 ) P_0(0,0) P0(0,0) P 1 ( 5 , 2 ) P_1(5,2) P1(5,2)

  • Δ x = 5 − 0 = 5 \Delta x = 5 - 0 = 5 Δx=50=5
  • Δ y = 2 − 0 = 2 \Delta y = 2 - 0 = 2 Δy=20=2

此时 x x x 为主位移方向,根据 bresenham 算法, e e e 初始化为 − Δ x = − 5 - \Delta x = -5 Δx=5。然后,我们将按照算法步骤进行迭代:

x x x y y y e e e 初始值 e e e 2 Δ y 2\Delta y y条件 e ≥ 0 e \ge 0 e0 是否成立?如果 e ≥ 0 e \ge 0 e0,请给出 e e e 2 Δ x 2\Delta x x 后的结果
00 − 5 -5 5 − 1 -1 1
10 − 1 -1 1 3 3 3 − 7 -7 7
21 − 7 -7 7 − 3 -3 3
31 − 3 -3 3 1 1 1 − 9 -9 9

因此,在 x = 3 x = 3 x=3 时, y y y 应该是 1 1 1


中点画线算法

中点算法原理: x x x 方向上每次加 1 1 1 y y y 方向上加不加 1 1 1 取决于中点误差项的值。

整数化的中点画线算法流程如下:

public void drawLine(int x0, int y0, int x1, int y1) {
    int dx = x1 - x0;
    int dy = y1 - y0;
    int d = dx - 2 * dy;	// 关键
    int x = x0;
    int y = y0;

    while (x <= x1) {
    	// 绘制点(x, y)
        plot(x, y);
       
        if (d > 0) { 
            d -= 2 * dy;
            x++;
        } else {
            d += 2 * (dx - dy);
            x++;
            y++;
        }
    }
}

大题:请用整数化的中点画线算法计算直线(0,0)(5,3)的扫描转换结果,并给出计算流程表

答:

根据整数化的中点画线算法,我们首先计算初始值:

  • d x = 5 − 0 = 5 dx = 5 - 0 = 5 dx=50=5
  • d y = 3 − 0 = 3 dy = 3 - 0 = 3 dy=30=3
  • d = d x − 2 d y = 5 − 2 ∗ 3 = − 1 d = dx - 2 dy = 5 - 2*3 = -1 d=dx2dy=523=1

然后,我们根据算法步骤逐步更新 x x x y y y,和 d d d 的值:

xydd是否大于0?更新操作
00-1 d = d + 2 d x − 2 d y = − 1 + 10 − 6 = 3 d = d + 2dx - 2dy = -1 + 10 - 6 = 3 d=d+2dx2dy=1+106=3
113 d = d − 2 d y = 3 − 6 = − 3 d = d - 2dy = 3 - 6 = -3 d=d2dy=36=3
21-3 d = d + 2 d x − 2 d y = − 3 + 10 − 6 = 1 d = d + 2dx - 2dy = -3 + 10 - 6 = 1 d=d+2dx2dy=3+106=1
321 d = d − 2 d y = 1 − 6 = − 5 d = d - 2dy = 1 - 6 = -5 d=d2dy=16=5
42-5 d = d + 2 d x − 2 d y = − 5 + 10 − 6 = − 1 d = d + 2dx - 2dy = -5 + 10 - 6 = -1 d=d+2dx2dy=5+106=1
53---

注意:在每一步中, x x x 都会增加 1 1 1,但 y y y 是否增加取决于 d d d 的值。


圆的扫描转换

考虑以坐标系原点为圆心,半径为 r r r 的圆。则圆周上各点满足 x 2 + y 2 = r 2 x^2+y^2=r^2 x2+y2=r2,也就是说:

F ( x , y ) = x 2 + y 2 − r 2 = 0 F(x, y) = x^2+y^2 - r^2 = 0 F(x,y)=x2+y2r2=0

这也成为圆的隐方程。
在这里插入图片描述
圆分平面成三个区域:

  • 对于圆上的点, F ( x , y ) = 0 F(x,y)=0 F(xy)0
  • 对于圆外的点, F ( x , y ) > 0 F(x,y)>0 F(xy)0
  • 对于圆内的点, F ( x , y ) < 0 F(x,y)<0 F(xy)0

圆的八对称性:只要扫描转换八分之一圆弧,
就可以求出整个圆弧的像素集。

因为圆关于坐标轴和对角线对称

在这里插入图片描述


中点画圆算法

中点画圆算法流程如下:

int x = 0;
int y = r;
double d = 1.25 - r;

while (x < y) { // 当 x = y 时结束
    plotCirclePoints(x, y);
    if (d >= 0) {
        d += 2 * (x - y) + 5;
        y--;
    } else {
        d += 2 * x + 3;
    }
    x++;
}

填空题:根据圆的八对称性,我们在扫描转换半径为R的圆形的时候,选择扫描转换圆心在【】,以(【】,【】)为起点,以【】为结束条件的圆弧,并且在扫描转换过程中,每一步画点的时候,一次画出【】个点。

答:

  • 【原点】
  • 【0】
  • 【R】
  • 【x=y】
  • 【8】

大题:使用中点画圆的扫描转换算法,扫描转换圆心在(0,0),半径为6的圆,按照算法流程给出每一步计算的误差D和Y坐标。

答:

根据中点画圆算法的描述,我们可以逐步计算每一步的 x x x y y y 坐标和误差 d d d 的值。

在这里插入图片描述

圆的半径 r = 6 r = 6 r=6,所以初始值为:

  • x = 0 x = 0 x=0
  • y = r = 6 y = r = 6 y=r=6
  • d = 1.25 − r = 1.25 − 6 = − 4.75 d = 1.25 - r = 1.25 - 6 = -4.75 d=1.25r=1.256=4.75

接下来,我们将按照算法步骤进行迭代。每次 d d d 的更新依赖于它是正还是负:

  • 如果 d ≥ 0 d \ge 0 d0,则 d = d + 2 ( x − y ) + 5 d = d + 2 (x - y) + 5 d=d+2(xy)+5,此时 y y y 1 1 1
  • 如果 d < 0 d < 0 d<0,则 d = d + 2 x + 3 d = d + 2 x + 3 d=d+2x+3,此时 y y y 不变

因此:

x x x y y y d d d d d d 是否 ≥ 0 \ge 0 0更新操作
0 0 0 6 6 6 − 4.75 -4.75 4.75 d = d + 2 x + 3 = − 4.75 + 3 = − 1.75 d = d + 2x + 3 = -4.75+ 3 = -1.75 d=d+2x+3=4.75+3=1.75
1 1 1 6 6 6 − 1.75 -1.75 1.75 d = d + 2 x + 3 = − 1.75 + 2 × 1 + 3 = 3.25 d = d + 2x + 3 = -1.75 + 2×1 + 3 = 3.25 d=d+2x+3=1.75+2×1+3=3.25
2 2 2 6 6 6 3.25 3.25 3.25 d = d + 2 ( x − y ) + 5 = 3.25 + 2 ( 2 − 6 ) + 5 = 0.25 d = d + 2(x - y) + 5 = 3.25 + 2(2-6) + 5 = 0.25 d=d+2(xy)+5=3.25+2(26)+5=0.25,同时 y = y − 1 y = y - 1 y=y1
3 3 3 5 5 5 0.25 0.25 0.25 d = d + 2 ( x − y ) + 5 = 0.25 + 2 ( 3 − 5 ) + 5 = 1.25 d = d + 2(x - y) + 5 = 0.25 + 2(3 - 5) + 5 = 1.25 d=d+2(xy)+5=0.25+2(35)+5=1.25,同时 y = y − 1 y = y - 1 y=y1
4 4 4 4 4 4

x = y x = y x=y 时,算法结束。


单选题:Bresenham圆扫描转换法中,初始误差 d 为?(B)

A.2-r

B. 3-2*r

C. 1-r

D. r


单选题:Bresenham圆的扫描转换算法的算法结束条件是( A)。

A.x==y

B. x=1

C. y=1

D. x!=y


反走样

  • 走样】:在连续空间中的物体映射到图像空间带来的各种各样的失真。
  • 反走样】:用于减少和消除各种走样的方法

反走样的技术:

硬件:提高显示器的分辨率

在这里插入图片描述

软件:改进软件算法。比如下面这个【加权区域采样】:

在这里插入图片描述

加权区域采样(距离,面积,体积),原理是利用人眼视觉特性,即人眼对某一区域颜色的识别是这个区域颜色的平均值。
通过加权平均的方法,调节像素的亮度和灰度,以产生模糊的边界,从而达到较好的视觉效果以消除“锯齿”。

另外还有【Wu反走样】:

武筱林于1991年在computer Graphics上提出 “Efficient Antialiasing Technique”。

Wu反走样算法原理是对于理想直线上的任一点,同时以两个不同亮度级别的相邻像素来表示。


单选题:下列不属于走样现象的有?(D)

A.阶梯现象

B.动画闪烁

C.亮度不均

D.深度丢失


单选题:下面关于反走样的方法中论述错误的是( D )

A.提高分辨率

B.把像素当作平面区域进行采样

C.采用特定形状的滤波器进行加权区域采样

D. 增强图像的显示亮度


单选题:如果背景颜色为(100,0,100),直线颜色为(200,200,100),反走样算法计算的前景色比率为0.2,则像素点的颜色?(C)

A.(180,160,100)

B.(150,100,100)

C.(120,40,100)

D.以上都不对

解析:

  1. 定义背景颜色 C b g = ( R b g , G b g , B b g ) C_{bg} = (R_{bg}, G_{bg}, B_{bg}) Cbg=(Rbg,Gbg,Bbg)
  2. 定义前景颜色 C f g = ( R f g , G f g , B f g ) C_{fg} = (R_{fg}, G_{fg}, B_{fg}) Cfg=(Rfg,Gfg,Bfg)
  3. 定义前景色比率为 α \alpha α,则背景色比率为 1 − α 1 - \alpha 1α
  4. 最终颜色 C = ( R , G , B ) C = (R, G, B) C=(R,G,B)

则:

C = C b g ⋅ ( 1 − α ) + C f g ⋅ α C = C_{bg} \cdot (1 - \alpha) + C_{fg} \cdot \alpha C=Cbg(1α)+Cfgα

也就是说:

  • R = R b g ⋅ ( 1 − α ) + R f g ⋅ α R = R_{bg} \cdot (1 - \alpha) + R_{fg} \cdot \alpha R=Rbg(1α)+Rfgα
  • G = G b g ⋅ ( 1 − α ) + G f g ⋅ α G = G_{bg} \cdot (1 - \alpha) + G_{fg} \cdot \alpha G=Gbg(1α)+Gfgα
  • B = B b g ⋅ ( 1 − α ) + B f g ⋅ α B = B_{bg} \cdot (1 - \alpha) + B_{fg} \cdot \alpha B=Bbg(1α)+Bfgα

对于给定的问题,将数值代入:

  • R = 100 ⋅ ( 1 − 0.2 ) + 200 ⋅ 0.2 = 120 R = 100 \cdot (1 - 0.2) + 200 \cdot 0.2 = 120 R=100(10.2)+2000.2=120
  • G = 0 ⋅ ( 1 − 0.2 ) + 200 ⋅ 0.2 = 40 G = 0 \cdot (1 - 0.2) + 200 \cdot 0.2 = 40 G=0(10.2)+2000.2=40
  • B = 100 ⋅ ( 1 − 0.2 ) + 100 ⋅ 0.2 = 100 B = 100 \cdot (1 - 0.2) + 100 \cdot 0.2 = 100 B=100(10.2)+1000.2=100

因此,最终颜色 C = ( 120 , 40 , 100 ) C = (120, 40, 100) C=(120,40,100)


单选题:产生走样的根本原因是( D )。

A.显示分辨率太低

B. 图像数据量太大

C. 显存太小

D .像素是有大小的,离散的,不是理想的数学上的点


判断题:确定最佳逼近图形的像素集合,并用指定属性写像素的过程称为图形的扫描转换或光栅化。(正确)


判断题:图形学中的直线是没有宽度和端点的。(正确)


简答题:走样的现象能不能完全消除?反走样的概念是什么?

答:

走样是由连续的三维空间映射到离散的屏幕像素带来的失真,能完全消除。

减轻走样现象的技术叫做反走样。


第三章 多边形填充

概念

多边形填充的定义:将一个多边形区域内每个像素点绘制上某种颜色的过程。


多边形的表示方法:

  • 顶点表示:用多边形的顶点序列来表示多边形
  • 点阵表示:用位于多边形内的像素点的集合来刻画多边形

在这里插入图片描述


多边形扫描转换的基本思想:

  • 对于一个多边形,用一组水平或垂直的扫描线进行扫描,求出每条扫描线与多边形的交点.
  • 这些交点将扫描线分割线段
  • 将落在多边形内的所有线段上的每个像素点赋以给定的多边形填充色。

在这里插入图片描述


区域是指相互连通的一组像素的集合,一般由封闭的区域边界定义。

区域填充一般采用种子填充算法,从区域内给定的种子像素出发,按填充颜色填充种子的相邻像素,直到边界为止。


有效边表填充

算法思路:

  1. 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值( y m i n y_{min} ymin y m a x y_{max} ymax
  2. y = y m i n y = y_{min} y=ymin y = y m a x y = y_{max} y=ymax 进行扫描,每一次用一条扫描线进行填充
  3. 对一条扫描线填充的过程可分为四个步骤:
    • 求交:扫描线与多边形各边的交点
    • 排序:把扫描线上所有交点按x递增顺序进行排序
    • 交点配对:将排序后的交点进行两两配对,每对交点代表扫描线与多边形的一个相交区间
    • 区间填色:把区间内的像素置为填充色

在这里插入图片描述

当扫描线与多边形相交,同时交点又是顶点时:

  1. 普通连接点的顶点个数计数为1
  2. 局部最低点的顶点个数计为2
  3. 局部最高点的顶点个数计为0

有效边表填充算法用 ET 边表和 AET 活动边表来实现。

边表(ET)是用来对除水平边外的所有边进行登记,来建立边的记录,内容如下:

x / y m i n x/y_{min} x/ymin y m a x y_{max} ymax 1 / k 1/k 1/knext

其中:

  • x / y m i n x/y_{min} x/ymin:边的最小的 y y y对应的 x x x
  • y m a x y_{max} ymax:边的最大 y y y
  • 1 / k 1/k 1/k:边斜率的倒数

ET 表建立以后,就可以开始扫描转换了。对不同的扫描线,与之相交的边线也是不同的。当对某一条扫描线进行扫描转换时,我们只需要考虑与它相交的那些边线,为此需要建立一个只与当前扫描线相交的边记录链表,称之为活动边表(AET表)。

AET 表的建立过程就是有效地进行填充的操作,在这个期间不断地重复:

  1. 合并 E T ET ET 表;
  2. x x x 递增排序;
  3. 实施填充;
  4. 删除 y m a x = y j + 1 y_{max}=y_j + 1 ymaxyj+1的边;
  5. 修改边记录 x i = x i + 1 / k x_i=x_i+1/k xi=xi+1/k
  6. y j + 1 y_j + 1 yj+1进入下一轮循环。

边缘填充

  • 算法思路:利用取补运算代替交点排序、配对、构造填充区间。
  • 算法原理:
    • 像素点颜色值经过偶数次取补运算后保持不变
    • 像素点颜色值经过奇数次取补运算后变为其补数
  • 算法分类:
    • 以扫描线为中心的边填充算法:对于每一条扫描线和每条多边形边的交点(x1,y1),将该扫描线上交点右方的所有像素取补,对每条扫描线做此处理,交点处理的顺序随意。
    • 以边为中心的边填充算法:将每条非水平边右侧的像素取补,边的处理顺序随意。

种子填充算法

  • 连通区域:
    • 4连通区域是指从区域内一点出发,通过上、下、左、右四种运动可到达区域内的任一像素点。
    • 8连通区域是指从区域内一点出发,通过上、下、左、右以及对角线方向的八种运动可到达区域内的每一像素点。
      在这里插入图片描述

以四连通区域的填充为例,种子填充算法的思路是:

  1. 初始化:将种子像素压入栈中。
  2. 循环检查
    • 如果栈为空,则算法结束。
    • 如果栈不为空,执行以下步骤:
      a. 从栈中弹出一个像素。
      b. 将该像素置为填充色。
      c. 检查该像素相邻的四连通像素是否为边界色或已经置为填充色。如果不是,将这些像素压入栈中。
  3. 重复步骤2,直到栈为空。
  4. 结束:所有可达的非边界且未填充的像素都已被填充。
public void floodFill(int[][] image, Point seed, int fillColor, int boundaryColor) {
    Stack<Point> stack = new Stack<>();
    stack.push(seed); // 初始化:将种子像素压入栈中

    while (!stack.isEmpty()) { // 循环检查
        Point current = stack.pop(); // 从栈中弹出一个像素
        int x = current.x;
        int y = current.y;

        // 检查当前像素是否越界或已经是填充色或边界色
        if (x < 0 || x >= image[0].length || y < 0 || y >= image.length || 
            image[y][x] == fillColor || image[y][x] == boundaryColor) {
            continue;
        }

        image[y][x] = fillColor; // 将该像素置为填充色

        // 检查相邻的四连通像素并压入栈中
        stack.push(new Point(x + 1, y));
        stack.push(new Point(x - 1, y));
        stack.push(new Point(x, y + 1));
        stack.push(new Point(x, y - 1));
    }
    // 结束:所有可达的非边界且未填充的像素都已被填充
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1876797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024steam夏促商店打不开、steam活动加载不了解决方法一览

今年的夏促终于开始了!目前可以看到很多精品小游戏在促销列表内&#xff0c;活动正式开启后还不知道又会是怎样的一幅场景。因为每年夏促都会有不少刚高考完的新手加入&#xff0c;遇到常见的steam商店打不开、活动页面不加载等问题不知道怎么解决。所以这里给大家准备了几种常…

从零创建深度学习张量库,支持gpu并行与自动微分

多年来&#xff0c;我一直在使用 PyTorch 构建和训练深度学习模型。尽管我已经学会了它的语法和规则&#xff0c;但总有一些东西激起了我的好奇心&#xff1a;这些操作内部发生了什么&#xff1f;这一切是如何运作的&#xff1f; 如果你已经到这里&#xff0c;你可能也有同样的…

mybatis的高级映射

mybatis的高级映射(重点) 表与表之间的关系&#xff1a; 一对一关系&#xff1a; 栗子&#xff1a;一个人对应一个身份证号 一对多关系&#xff1a; 栗子&#xff1a;一个用户可以有多个订单 1. 分析需求&…

权限维持-域环境单机版---粘滞键屏保登录

免责声明;本文仅做技术交流与学习,,, 目录 粘滞键: 粘滞键位置&#xff1a; 屏保&登录: 1、WinLogon配合无文件落地上线 结合ps命令: 2、屏幕保护生效后执行后门 粘滞键: Windows维权之粘滞键项维权-腾讯云开发者社区-腾讯云 (tencent.com) 系统自带的辅助功能进行替…

LNBxx21的功能

LNBxx21功能&#xff1a; LNBxx21 家族是为卫星LNB模块供电/连接LNB块与接收机的集成化解决方案。LNBxx21的很多功能可以让LNB电源/接口符合国际标准&#xff0c;此外&#xff0c;模块内还包括一个I2C总线接口&#xff0c;因为集成了一个升压直流-直流控制器&#xff0c;所以可…

MySQL InnoDB支持几种行格式

数据库表的行格式决定了一行数据是如何进行物理存储的&#xff0c;进而影响查询和DML操作的性能。 在InnoDB中&#xff0c;常见的行格式有4种&#xff1a; 1、COMPACT&#xff1a;是MySQL 5.0之前的默认格式&#xff0c;除了保存字段值外&#xff0c;还会利用空值列表保存null…

zabbix-agent2启动失败报错Unit zabbix-agent2.service entered failed state.

文章目录 1&#xff0c;用systemctl status zabbix-agent2查看报错状态2&#xff0c;用journalctl -xe查看一下报错日志3&#xff0c;再看一下zabbix的日志。4&#xff0c;错误修改5&#xff0c; 再次重启zabbix-agent2 1&#xff0c;用systemctl status zabbix-agent2查看报错…

【漏洞复现】Atlassian Confluence RCE(CVE-2023-22527)

产品简介 Atlassian Confluence 是一款由Atlassian开发的企业团队协作和知识管理软件&#xff0c;提供了一个集中化的平台&#xff0c;用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。是面向大型企业和组织的高可用性、可扩展性和高性能版本。 0x02 漏洞概述 …

综合布线实训室建设可行性报告

1、 建设综合布线实训室的目的和意义 1.1 响应国家职业教育政策 在国家对职业教育的高度重视和政策支持下&#xff0c;综合布线实训室的建设不仅是对国家教育方针的积极响应&#xff0c;也是对技术教育改革的有力推动。通过这一平台&#xff0c;我们旨在培育出一批具有强烈实…

全面体验ONLYOFFICE 8.1版本桌面编辑器

ONLYOFFICE官网 在当今的数字化办公环境中&#xff0c;选择合适的文档处理工具对于提升工作效率和团队协作至关重要。ONLYOFFICE 8.1版本桌面编辑器&#xff0c;作为一款集成了多项先进功能的办公软件&#xff0c;为用户提供了全新的办公体验。今天&#xff0c;我们将深入探索…

[linux]sed命令基础入门详解

sed是一种流编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff0c;接着用sed命令处理缓冲区中的内容&#xff0c;处理完成后&#xff0c;把缓冲区的内容送往屏幕。接着处理下一行&#xff0c;这…

imx6ull/linux应用编程学习(5)FrameBuffer的应用编程

什么是FrameBuffer&#xff1f; Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;所以 Framebuffer 就是帧缓冲&#xff0c; 这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。帧缓冲&#xff08;framebuffer&#xff09;是 Linux 系统中的一种…

泰迪智能科技携手广州番禺职业技术学院共建上进双创工作室

为充分发挥校企双方的优势&#xff0c;促进产教融合&#xff0c;发挥职业教育为社会、行业、企业服务的作用&#xff0c;为企业培养更多高素质、高技能的应用型人才的同时也为学生实习、就业提供更大空间。6月26日&#xff0c;“泰迪广州番禺职业技术学院上进双创工作室签约授牌…

【C++ | 类型转换】转换构造函数、类型转换运算符 详解及例子源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

steam社区加载异常、加载失败、无法加载、黑屏的解决方法

随着steam夏季特卖的临近&#xff0c;最近几天开启史低折扣的大作已经越来越少了&#xff0c;不过也并不是没有。最经典的知名大作文明6之前已经打到1折的骨折价了&#xff0c;没想到也能背刺&#xff0c;现在是新史低价0.5折11元&#xff0c;很多玩家入手后纷纷前往社区看新手…

SerDes介绍以及原语使用介绍(4)ISERDESE2原语仿真

文章目录 前言一、iserdese2_module模块二、oserdese2_module模块三、顶层模块四、仿真结果分析 前言 上文详细介绍了ISERDESE2原语的使用&#xff0c;本文根据仿真对ISERDESE2原语的使用进一步加深印象。在仿真时&#xff0c;与OSERDESE进行回环。 一、iserdese2_module模块…

程序员学长 | 快速学会一个算法模型,LSTM

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学会一个算法模型&#xff0c;LSTM 今天&#xff0c;给大家分享一个超强的算法模型&#xff0c;LSTM。 LSTM&#xff08;Long Short-Term Memory…

AI绘画 Stable Diffusion【实战进阶】:图片的创成式填充,竖图秒变横屏壁纸!想怎么扩就怎么扩!

大家好&#xff0c;我是向阳。 所谓图片的创成式填充&#xff0c;就是基于原有图片进行扩展或延展&#xff0c;在保证图片合理性的同时实现与原图片的高度契合。是目前图像处理中常见应用之一。之前大部分都是通过PS工具来处理的。今天我们来看看在AI绘画工具 Stable Diffusio…

微信内置H5支付

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 场景是用户通过微信扫app内的收款码&#xff0c;跳到一个h5页面。然后完成支付。 代码实现的整体流程&#xff1a; 使用微信扫码&#xff0c;码是app内生成的&#xff0c;码…

Qt WPS(有源码)

项目源码地址&#xff1a;WPS完整源码 一.项目详情 该项目仿照WPS&#xff0c;实现了部分的功能&#xff0c;能够很方便对文本和HTML进行修改&#xff0c;并且有打印功能&#xff0c;可以很方便的生成PDF。 应用界面 项目架构分析 这个项目主要可分为两个部分&#xff0c;一…