图形学笔记(一):基础知识

从这便文章开始整理学习到的计算机图像学相关知识,原则是只写我没在网上找到清楚解释的内容,如果有很好的文章介绍相关内容,我会直接把链接贴上。

首先弄清 Computer Graphics和 Computer Vision的关系和区别

大致上讲,CG是图像和视频合成的工具和机制,而CV通常用于分析和提取视频和图像的语义内容,这两个领域的技术没有明显的界限,但是目的稍有不同。

fig1

线性代数基础

  • 向量积 Vector Cross product

    关于Cross product维基百科解释的非常详细。
    u ⃗ × v ⃗ = ∣ u ⃗ ∣ ∣ v ⃗ ∣ s i n θ c ⃗ \vec u\times\vec v=|\vec u||\vec v|sin\theta\vec c u ×v =u v sinθc
    需要特别注意的是两个向量uv在三维空间的叉乘的几何意义

  • 数量积 Vector Dot Product

    关于Dot Product 的相关知识。
    u ⃗ ⋅ v ⃗ = ∣ u ⃗ ∣ ∣ v ⃗ ∣ c o s θ \vec u\cdot\vec v=|\vec u||\vec v|cos\theta u v =u v cosθ

线性代数变换

  • 仿射组合 The affine combination

    首先先了解一下什么是仿射变换.

    如何通俗地讲解「仿射变换」这个概念? - 马同学的回答 - 知乎

    而仿射函数实际上就是表示这一变换过程的函数,一般形式是 f ( x ⃗ ) = A x ⃗ + b ⃗ f(\vec x)=A\vec x+\vec b f(x )=Ax +b , A A A是一个 m × k m\times k m×k矩阵, x ⃗ \vec x x 是一个 k k k向量, b ⃗ \vec b b 是一个 m m m向量。

    仿射组合的概念更加抽象,可以通过下面这个例子了解一下两个二维向量的仿射组合:

    仿射组合为什么代表一条线? - 电猫哥electricat的回答 - 知乎

    这个例子证明了两个二维向量的仿射组合可以代表一条直线,可以发现仿射组合其实是对于给定向量 v ⃗ 1 , v ⃗ 2 \vec v_1,\vec v_2 v 1,v 2(者点 p 1 , p 2 p_1,p_2 p1p2)与一组权重 [ λ 0 , λ 1 ] [\lambda_0,\lambda_1] [λ0,λ1]的线性变换,而且必须满足 λ 1 + λ 2 = 1 \lambda_1+\lambda_2=1 λ1+λ2=1,即 y ⃗ = λ 1 v ⃗ 1 + λ 2 v ⃗ 2 \vec y=\lambda_1\vec v_1+\lambda_2\vec v_2 y =λ1v 1+λ2v 2。推广到 n n n个向量定义如下:
    组 合 { v ∈ V ∣ v = ∑ i = 0 n λ i v i , w i t h ∑ i = 0 n λ i = 1 } 被 称 为 向 量 v i 的 仿 射 组 合 组合 \{v\in V|v=\sum_{i=0}^{n}\lambda_iv_i,with\sum_{i=0}^{n}\lambda_i=1\} 被称为向量v_i的仿射组合 {vVv=i=0nλivi,withi=0nλi=1}vi仿

    (未完,这部分以后会补张图…)

  • 重心坐标 Barycentric Coordinates

    上面介绍的内容其实隐含了一个前提:坐标系类型已确定。在数学中,坐标系的类型很多,例如齐次坐标系(homogeneous coordinates or projective coordinates),和笛卡尔坐标系(Cartesian coordinate system),在不同的坐标系下,对事物的描述方法和变换自然是不同的。各个坐标的关系可以参考下面的文章:

    从带号面积到坐标系的建立 - PeaucellieRay的文章 - 知乎

    这里主要介绍一下重心坐标系,找到一片讲的比较清楚的文章。

    重心坐标(Barycentric coordinates) - 杨超的文章 - 知乎

    通过上文其实我们可以发觉重心坐标的表示方法就是点 P i P_i Pi的仿射组合,而 w i w_i wi就是组合权重。
    值得注意的是,上文的三角形其实是放在一个仿射空间(affine space)里的。维基百科这样描述仿射空间:

    仿射空间是没有起点只有方向大小的向量所构成的向量空间。

    我的理解是仿射空间就是没有原点的线性空间,这里就不展开讨论了。

    回到重心坐标的话题上来,通过结合仿射组合,有下面的定义:

    在 一 个 仿 射 空 间 的 坐 标 系 内 , 给 出 点 集 B = { p 0 , . . . p n } 和 点 p 的 仿 射 组 合 : 在一个仿射空间的坐标系内,给出点集B=\{p_0,...p_n\}和点p的仿射组合: 仿B={p0,...pn}p仿:
    p = ∑ i = 0 n λ i p i   w i t h   λ i ≥ 0 ;   ∑ i = 0 n λ i = 1 p=\sum_{i=0}^{n}\lambda_ip_i\ with\ \lambda_i\ge0;\ \sum_{i=0}^{n}\lambda_i=1 p=i=0nλipi with λi0; i=0nλi=1

    λ i 就 是 点 p 的 重 心 坐 标 ( b a r y c e n t r i c   c o o r d i n a t e s ) . \lambda_i就是点p的重心坐标(barycentric\ coordinates). λipbarycentric coordinates).

    在这里插入图片描述
    通过多个点确定一个坐标确实感觉很费劲,但是如上个链接里的文章所说,这个坐标系大有可为,在计算机图形学中需要使用一个非常重要的技术——线性插值,就用到重心坐标,这个以后的文章一改也会提到。

  • 凸包 Convex Hulls

    凸包的几何意义是给定空间一堆离散的点,计算能够包含这些点的一个凸多边形,如下图可以用凸包讲general mesh的点精简成convex mesh,在碰撞检测中省去了大量内存。

在这里插入图片描述

凸包的表示方法如下,可以发现可以利用仿射组合保证凸性(Convexity),原因暂不讨论。

点 集 c o { p 0 , . . . , p n } = { p ∣ p = ∑ i = 0 n λ i p i , ∑ i = 0 n λ i , a n d   λ i ≥ 0 , i = 0 , . . . , n } 点集 co\{p_0,...,p_n\}=\{p|p=\sum_{i=0}^{n}\lambda_ip_i,\sum_{i=0}^{n}\lambda_i,and\ \lambda_i\ge0,i=0,...,n\} co{p0,...,pn}={pp=i=0nλipi,i=0nλi,and λi0,i=0,...,n}
c o { p 0 , . . . , p n } 就 是 点 集 p 1 , . . . , p n 的 凸 包 co\{p_0,...,p_n\}就是点集p_1,...,p_n的凸包 co{p0,...,pn}p1...,pn

  • 仿射映射 Affine mappings

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值