仿射变换与齐次坐标

仿射变换(Affine Transformation)

齐次坐标系(Homogeneous Coordinate)

定义:

所谓线性变换是指两个线性空间的映射,一个变换是线性变换,必须满足两个条件,也就是我们经常说的线性条件:

      additivity

      homogeneity

理解:

在《3D数学基础:图形与游戏开发》》9.4.2中说到4x4平移矩阵,因为3x3矩阵平移并不能用

乘法表示,也就是说,我们矢量来表示空间中一个点:

r = {rx,ry,rz}

而平移的矢量为

t = {tx,ty,tz}

那么一般化做法是:

r + t = {rx+tx, ry+ty, rz+tz}

所谓不能用乘法表示就是:

r + t = r · x(x 表示未知)

就是x是无解的

所以表示的是线性变换,不包含平移

那么这样就需要增加一个维度,就是4维度的

也就是说在4D空间中,乘法仍然不能表示4D的平移,4D零向量总是变化成零向量,我们增加一个维度后,就是切变4D空间,3D空间平面不经过4D原点,就可以使用

4D切变表示3D平移

4x4的意义:

在计算机图形学中,坐标转换通常不是单一的,一个几何体在每一帧可能都设计了多个平移,旋转,缩放等变化,

这些变化我们通常使用串接各个子变化矩阵的方式得到一个最终变化矩阵,从而减少计算量

仿射变换后不改变点的共线/共面性,而且还保持比例

如果我们要变换一个三角形,只需要对三个定点v1,v2,v3进行变换T就可以了,对于原先边v1v2上的点,变换后一定还在边后T(v1)T(v2)上。

时间: 2024-10-18 20:09:45

仿射变换与齐次坐标的相关文章

安卓自定义View进阶-Matrix原理

Matrix原理 作者微博: @GcsSloop [本系列相关文章] 前言 本文内容偏向理论,和 画布操作 有重叠的部分,本文会让你更加深入的了解其中的原理. 本篇的主角Matrix,是一个一直在后台默默工作的劳动模范,虽然我们所有看到View背后都有着Matrix的功劳,但我们却很少见到它,本篇我们就看看它是何方神圣吧. 由于Google已经对这一部分已经做了很好的封装,所以跳过本部分对实际开发影响并不会太大,不想深究的粗略浏览即可,下一篇中将会详细讲解Matrix的具体用法和技巧. Matr

由正交矩阵构建的仿射变换矩阵求逆的快速算法

原文地址http://blog.csdn.net/i_dovelemon/article/details/45827953 齐次坐标 我们都知道,在3D图形学中,所有的变换都可以划分为三种最基础的变换方式,分别为: 旋转变换 缩放变换 平移变换 通过对这三种变换进行组合,就能够实现任意的变换形式. 在3D坐标下,如果向量使用3D向量表示的话,对于这三种变换的处理方式如下: 旋转变换:乘法运算 缩放变换:乘法运算 平移变换:加法运算 也就是说,这三种变换的处理方式是不同的,旋转和缩放变换能够通过乘

opencv —— getRotationMatrix2D、warpAffine 仿射变换

仿射变换的基本概念 仿射变换是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,其数学表达式形式如下: 对应的齐次坐标矩阵表示形式为: 仿射变换保持了二维图形的“平直性”(直线经仿射变换后依然为直线)和“平行性”(直线之间的相对位置关系保持不变,平行线经仿射变换后依然为平行线,且直线上点的位置顺序不会发生变化). 非共线的三对对应点可以确定一个唯一的仿射变换. 几种常见的变换形式: 平移变换 数学形式: 矩阵形式: 缩放变换 矩阵形式: 旋转变换 矩阵形式: 变换形式汇总图: OpenC

WebGL(6) -- 仿射变换

本文参考<WebGL编程指南> 仿射变换:移动,旋转,缩放 在做变换时,通常是使用矩阵. 首先画出一个初始的三角形作为对比: 源码: test.js function main() { var gl = Init(); if(!gl) { console.log('Failed to init'); return; } var n = InitVertices(gl); if(n < 0) { console.log('Failed to init vertices'); return;

iOS下的2D仿射变换机制(CGAffineTransform相关)

仿射变换简介 仿射变换源于CoreGraphics框架,主要作用是绘制2D级别的图层,几乎所有iOS设备屏幕上的界面元素都是由CoreGraphics来负责绘制.而我们要了解的2D仿射变换是其下负责二维坐标到二维坐标的线性变换工作,它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线,圆弧经过变换之后依然是圆弧)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变),只有依照向量产生的二维线条间的夹角会可能发生变化.仿射变换包括:平移(Tra

ios UItableView,UITableViewHeaderFooterView分组头部的重用机制,简单地仿射变换CGAffineTransform

怎样设置包括第一栏在内相同高度的section(小技巧,虽然容易但容易忽略) *第一步,在viewdidload里将尾部设为0,table.sectionFooterHeight = 0;(代理方法)- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0; }虽然也可以设置尾部高度,但是设置后没有效果 第二步,调用tableView的代理方法- (CGF

仿射变换---位移+缩放比例+旋转

对于仿射变换的理解,以本人现阶段水平还谈不上是深入了解,我喜欢把它想象成一种简单的动画效果,下面介绍几种简单的变化:位置移动,按一定比例缩放,顺时针.逆时针旋转 #import "ViewController.h" @interface ViewController () @property (nonatomic,weak) UIView * rectView; @end @implementation ViewController - (void)viewDidLoad { [sup

用UISliader和仿射变换-实现等比例缩放

今天在网上搜了一下没找到用slider实现等比例缩放的例子 今天自己做了一个大家看下.图片放大缩小,slider往左滑动缩小,slider往右滑动放大 #import "ViewController.h" @interface ViewController () { UIImageView * _umgView; UISlider * _sl; } @end @implementation ViewController - (void)viewDidLoad { [super view

矩阵理论之仿射变换

概念:在几何学中,仿射变换指一个向量空间进行一次线性变换并加上一次平移变换,并成为另一个向量空间.注意,平移变换不属于线性变换.表达式如下: 其中,A即是我们的变换矩阵. 这里我们先暂不讨论平移变换分量,只讨论变换矩阵.具体来说,只讨论二维空间的变换矩阵. 在二维空间中,一般比较常见的线性变换,包括:旋转.缩放.切变.反射以及正投影. 1. 旋转: 绕原点逆时针旋转θ角的矩阵表示为: 2. 缩放: 这里的α和β分别是对x和y轴的缩放系数: 3. 切变(transvection): 切变其实就是倾