原创

为什么需要仿射空间?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://mysoft.blog.csdn.net/article/details/54574484

仿射空间与仿射变换在计算机图形学中有着很重要的应用。在线性空间中,我们用矩阵乘向量的方法,可以表示各式各样的线性变换,完成诸多的功能,但是有一种极其常用的变换却不能用线性变换的方式表示,那就是平移,一个图形的平移是非线性的!(这一点只需要看平移前各点与原点的连线和平移后各点与原点之间的连线可知,或者记平移变换为FF,有F(v1+v2)≠F(v1)+F(v2))。为了表示平移,以及现实世界的描述,就需要使用仿射空间。

仿射空间是数学中的几何结构,这种结构是欧式空间的仿射特性的推广。在仿射空间中,点与点之间做差可以得到向量,点与向量做加法将得到另一个点,但是点与点之间不可以做加法。
仿射空间是一个点集,它的定义是:
(1)设A为一个点集,A中任意两个有序点P、Q对应于n维矢量空间中的一个矢量a;
(2)设P、Q、R为A中任意三点,P、Q对应于矢量a,Q、R对应于矢量b,则P、R对应于矢量a+b.
具有上面两个性质的点集A就叫做一个仿射空间。

仿射空间和线性空间(向量空间/矢量空间)的区别在于是否有选定的原点。仿射空间中的任何两点的地位等价,而线性空间的原点是个特殊的点。


想象你某天醒来发觉自己是在一个旅馆房间里,推门出去一看,外面是个无限长的走廊,走廊两边的房间都一模一样而且没有房间号,那么你就没法打电话让别人知道你的具体位置,因为你缺乏一个参照点。这就是一维仿射空间的例子(如果你把走廊看成线)。


可是如果你推开窗望出去发现只有一个窗子是红色窗帘而其它都是绿色窗帘,你就可以说“如果面向窗外,我在红色窗帘的右边第三个房间”,因为你有了参照点或者说原点。这时候就可以给这个走廊一个线性空间的结构。如果你把有红色窗帘的房间号定作0号,右边房间给正数房间号,左边给负数房间号,你甚至可以拿房间(号)作加法。紧挨红色窗帘左边的房间(-1)加右边的房间(+1)等于红色窗帘的房间(0)。


而在没有参照点之前,你可以数出两个房间之间差几个房间,所以某种意义上你可以作减法,但是加法就完全没有意义。这也是仿射空间跟线性空间的一个区别。


仿射组合(Affine Combination)
维基百科的解释:Affine combination, a certain kind of constrained linear combination


x1,x2,...,xk属于R^n的点,a1,a2,...,ak为标量,并且满足a1+a2+,...+ak=1,那么组合y=a1x1+a2x2+...+akxk就是一个仿射组合,为了更容易的表述这个y的集合形状,不妨R^n的n为3,k也取3,,也就是说x1,x2,x3不共线的3点,a1+a2+a3=1,y=a1x1+a2x2+a3x3


分析过程


1:先让a3=0,那么y=a1x1+a2x2,这个很容易知道是过了x1,x2的一条直线(仿射空间里任意两点相减为一条过两点的向量)


2:任意取x1x2这条直线上一点,然后和x3联立,构成了x1x2上任意一点和x3确定的直线


3:由于x1x2是一条直线,故每一个点和x3的连线就铺满了整个2维的平面,这个平面过着3个点


结论:仿射组合应该是过了这些点的一个超平面


1. C++标准模板库从入门到精通 

2.跟老菜鸟学C++

3. 跟老菜鸟学python

4. 在VC2015里学会使用tinyxml库

5. 在Windows下SVN的版本管理与实战 

 http://edu.csdn.net/course/detail/2579

6.Visual Studio 2015开发C++程序的基本使用 

http://edu.csdn.net/course/detail/2570

7.在VC2015里使用protobuf协议

8.在VC2015里学会使用MySQL数据库



文章最后发布于: 2017-01-16 15:51:36
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览