可视计算与交互概论 notes整理第8-11章
第八章 几何表示
在几何部分,如何表示空间中的几何体是贯穿其中的主题
几何表示:描述三维物体的形状
计算机中表示几何体的常见方法:
显式表示方法:点云 (point cloud)、多边形网格 (polygon mesh)、细分表面 (subdivision surface) 等显式表示方法
隐式表示方法:水平集 (level set)、代数曲面 (algebraic surface)
多边形网格模型
多边形网格模型通过记录顶点和多边形来表示几何体的表面
多边形网格模型是由一组顶点、边和面组成,这些定义了物体的形状,由顶点列表、边列表和面列表构成。
顶点是 3D 空间中的单一点
边是连接两个顶点的线
面是边的封闭环。面通常是三角形或四边形,并可用于表示曲面或其他复杂形状
欧拉定理:多面体的顶点数 v、边数 e、面数f 满足 v - e + f = 2
多边形网格相较于其他几何表达有很多优点:
容易理解和使用,也能十分简便地进行渲染和几何形状处理
非常通用,它可以用来创建各种形状,从简单的立方体到复杂的角色
可扩展性高:可以用于创建 3D 打印模型,以及逼真的 ...
数据结构与算法A 第五章二叉树
二叉树的概念二叉树的定义和基本术语
二叉树:二叉树由结点的有限集合构成这个有限集合或者为空集 (empty)或者为由一个根结点 (root) 及两棵互不相交、分别称作这个根的左子树 (left subtree) 和右子树 (right subtree) 的二叉树组成的集合
注意:每个结点至多两棵子树,且有左右之分,不能随意交换
二叉树的五种基本形态:二叉树可以为空,结点的左、右子树也可空
空
独根
空左
空右
左右都不空
根:引出二叉树结点的起始结点
父结点:任何非根结点的前驱结点
子结点:左子结点(左孩子,左子女)。右子结点(右孩子,右子女)
兄弟结点:具有相同的父结点
叶结点:没有子结点的结点
度:一个结点子树数目
内部结点(分支结点):除叶结点外非终端结点
边:父结点k与子结点k’之间的有向连线<k,k’>
路径:从结点k0到结点ks存在一些边相连
满二叉树、完全二叉树、扩充二叉树
满二叉树:一棵二叉树的任何结点,或是树叶,或者左右结点均非空(没有度为1的情况)
完全二叉树:一棵二叉树最多只有最下面的两层结点度数可以<2,并 ...
可视计算与交互概论 notes整理第5-7章
第五章 反走样走样与反走样
在屏幕像素密度高的时候,图形整体看起来是连续的;而当屏幕像素比较低,或者对局部进行放大时,我们就能看到大量的影响观感的锯齿
走样(Aliasing)现象:锯齿、混淆、摩尔纹的不自然结果
在本质上,走样现象是我们用离散的像素近似表示连续的图形、图片时离散精度(采样频率)不够导致的。因此不管我们是在光栅化,还是处理图像,还是进行三维渲染,还是进行其他的离散化,当采样频率不够的时候就可能出现走样现象(离散信号会导致中间变化的缺失)
反走样(Anti Aliasing):为了减轻或避免走样现象的技术
信号采样理论
固定采样的频率(像素密度),逐渐增加连续信号的频率。连续信号的频率越高,离散化信号偏差越高,走样现象发生越严重
为了从数学上定义到底什么是走样,我们需要借助信号处理中的频域(Frequency domain)分析理论.频域分析的基础是傅里叶变换(Fourier transform):是任意一个信号 f(x) 都可以展开成一系列不同频率的余弦函数 cos(2ωπx) 和正弦函数 sin(2ωπx) 的加和.不同频率对应的强度系数由 F(ω)给 ...
可视计算与交互概论 notes整理第1-4章
第一章 引言
可视计算 (visual computing) 是针对视觉内容生成与处理的所有计算机科学分支的总称,是由计算机图形学、计算机视觉等多个学科间越来越广泛的交叉而产生的交叉领域或学科。它涉及到的学科或领域有计算机图形学、图像处理、可视化、计算机视觉、虚拟现实和增强现实以及视频处理。同时,可视计算还包括模式识别、人机交互、机器学习和数字图书馆等方面。
计算机图形学的主要研究内容
计算机图形学主要研究三个课题:
建模:三维模型建模方法是计算机图形学的重要基础,它研究如何在计算机中表示物体以及如何建立这些表示。在对几何进行表示时,我们可以使用样条函数来表示曲线,用网格、样条函数、细分曲面等来表示表面,用网格 (mesh)、构造实体几何(Constructive Solid Geometry, CSG)、二进制空间划分(Binary SpacePartitioning, BSP) 等来表示立体图形。
渲染:渲染是在计算机中模拟图像的形成过程。在得到 3D 模型及场景之后,要使其能够被直观地观看,就需要将虚拟的 3D 物体和场景,通过设置虚拟的相机、光照参数等,最终转换为 2D 图片 ...
数据结构与算法A 第四章字符串
字符串的基本概念
字符串是组成元素(结点)为单个字符(数字、文本字符或特定的符号)的线性表,简称“串”
字符串所包含的字符个数成为串的长度。空串:长度为零的串“”;空格串:“ ”
字符串的逻辑结构和线性表逻辑结构的区别:
字符串的数据对象约束为字符集
字符串的基本操作通常以“串的整体”为操作对象
字符串常数:用一对双撇号“xxxx”作为左右括号,中间字符个数有限
字符编码
字符类型是单字节(8 bits)类型
采用ASCII码对128个符号(字符集charset)进行编码
通用文字符号编码标准UNICODE
字符的编码顺序
字符编码表一般遵循“偏序编码规则”:根据字符的自然含义编码,使字符集中的编码顺序和其自然次序一致
字符偏序:根据字符的自然含义,某些字符间两两可以比较次序
encode()是符号的ASCII编码(序号)的映射函数
对于字母而言,大小次序就是按照字典编目次序。e.g. “monday”<”sunday”<”tuesday”.”123”<”1234”<”23”
字符串ADT
子串:s1 = a0a1a2 ...
Deep Learning with PyTorch: A 60 Minute Blitz 自学笔记
Tensor
张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码
张量类似于NumPy的ndarray,除了张量可以在GPU或其他专用硬件上运行以加速计算
12import torchimport numpy as np
Tensor Initialization
张量可以通过多种方式初始化
张量可以直接从数据中创建。数据类型是自动推断的。torch.tensor(data) 12data = [[1, 2], [3, 4]]x_data = torch.tensor(data)
张量可以从NumPy中的arrays创建,反之亦然。torch.from_numpy(np_array) 12np_array = np.array(data)x_np = torch.from_numpy(np_array)
从另一个张量,新张量将保留参数张量的属性(形状、数据类型)。torch.ones_like(tensor,type) & torch.rand_like(tensor,type) 1234567 ...
数据结构与算法A 第三章栈与队列
栈和队列是典型的线性结构,常被称为“操作受限的线性表”或“限制存取点的线性表”
栈
栈是一种限定仅在限制在一端进行插入和删除的线性表,无论是插入元素还是删除读取栈中的元素,都只能固定在线性表的一断进行。这一端被称为栈顶(top),另一端叫做栈底(bottom)
最后插入栈中的元素是最先被删除或读取的元素,而最先压入的元素则被放在栈的底部。栈的修改是按后进先出的原则进行(Last-In First-Out,LIFO),也称“下推表”
push操作:往栈中插入元素,简称压栈或入栈;pop操作:删除栈顶元素,简称出栈或弹出
栈的ADT1234567891011template <class T> // 栈的元素类型为 Tclass Stack { public: // 栈的运算集 void clear(); // 变为空栈 bool push(const T item); // item入栈,成功则返回真,否则返回假 bool pop(T & item); // 返回 ...
AI中的编程 Parallel Communication
GPU HardwareThread Blocks And GPU Hardware
一个thread对应GPU核,tread block对应SM(Streaming Multiprocessor),而一个grid对应若干个SM
A thread block contains many threads
A thread block must be on one SM; a SM may run more than one block
The programmer is responsible for defining blocks
The GPU is responsible for allocating thread blocks to hardware SMs
The threads run in parallel, and CUDA makes few guarantees about when and where thread blocks will run.thread block间的运行是并行的,无约束的
A Thread-Block Programming ...