[ 更新 ]更好的方法见[用抽象代数讨论仿射变换和仿射空间中的坐标变换] ,以下是之前的内容。

以下的推导 结论是正确的,可是过程有点懵。

以下使用行向量:

e1=(1,0,0)

e2=(0,1,0)

e3=(0,0,1)

i, j, k是三个线性无关的向量。它们在e1,e2,e3坐标系下的坐标也记作i,j,k

i’, j’, k’是三个线性无关的向量,它们在e1,e2,e3坐标系下的坐标也记作i’, j’, k’


denote⎡⎣⎢ijk⎤⎦⎥=A,⎡⎣⎢i′j′k′⎤⎦⎥=B





已知点P相对于Oijk的坐标是(x,y,z)

则点P相对于O’i’j’k’的坐标:

(x′,y′,z′)=((x,y,z)A+(O−O′))B−1

若B是正交矩阵。就不用求逆了,求转置就是。

特别地,

若O=(0,0,0),i=e1,j=e2,k=e3,则

(x′,y′,z′)=((x,y,z)−O′))B−1


推导

设点P相对于O’i’j’k’的坐标是(x’,y’,z’)

∵P=O+(x,y,z)A=O′+(x′,y′,z′)B
∴(x′,y′,z′)=((x,y,z)A+(O−O′))B−1


补充

记 B=AM(M=A−1B),即M是把i,j,k变换到i’,j’,k’的变换矩阵,

∴(x′,y′,z′)=((x,y,z)A+(O−O′))M−1A−1

特别地。

若O=(0,0,0),i=e1,j=e2,k=e3,则

(x′,y′,z′)=((x,y,z)−O′))M−1andM=B


应用

实际应用中,用到的一般都是O=(0,0,0),i=e1,j=e2,k=e3的特殊情况。

这是由于:问题在描写叙述O’i’j’k’坐标的时候一般都是相对于Oikj而言的;

这里没有绝对的坐标系,仿射空间中不论什么一个点都看以看成(0,0,…0),随意一组基都能够看成{(1,0,…0), (0,1,…0), (0,0,…1)}。

(x,y,z,1)[M−1−O′M−101]=(x′,y′,z′,1)
[M−1−O′M−101]=[MO′01]−1

换个角度理解

点P不动。把坐标架O,i,j,k变换到O’,i’,j’,k’,则变换矩阵是(MO′01), M=B,

就相当于 坐标架不动,点P逆着上述变换,变换到新坐标。

变换的两种方式

①先原地变换坐标架,再平移坐标架

[B001][IO′01]=[BO′01]

②先平移坐标架。再相对平移之后的原点变换坐标架

[IO′01]X=[BO′01]X=[BO′−O′B01]

X能够看成先平移回原点,相对原点 原地变换 坐标架,再平移过去:

X=[B−O′B01][IO′01]
[B−O′B01]=[I−O′01][B001]

注意到 X 与 [B001] 是类似矩阵,正是同一(4维的)线性变换在不同基下的坐标表示。1

3D 坐标变换 公式 推导的更多相关文章

  1. 3D旋转矩阵的推导过程

    3D旋转矩阵的推导过程 包含平移的线性变换称作仿射变换,3D中的仿射变换不能用 3 x 3 矩阵表达,必须使用4 x 4矩阵. 一般来说,变换物体相当于以相反的量变换描述这个物体的坐标系.当有多个变换 ...

  2. 2d,3d中旋转推导

    二维绕原点旋转,其实点为(x,y),旋转角度为黄色标注的角度. 推导过程如下: x' = r cos(al+be); y' = r sin(al+be);x '= rcosalcosbe-rsinal ...

  3. 3D UI场景中,把XY平面的尺寸映射为屏幕像素的数学模型推导

    概述及目录(版权所有,请勿转载,欢迎读者提出错误) 之前用kanzi的3D UI引擎和cocos-2d的时候都有遇到过这个问题,就如何把3D场景中的XY平面的尺寸映射为与屏幕像素一一对应的,即XY平面 ...

  4. DirectX12 3D 游戏开发与实战第三章内容

    变换 学习目标 理解如何使用矩阵表示线性变换和仿射变换 学习对几何体进行缩放.旋转和平移的坐标变换 根据矩阵之间的乘法运算性质,将多个变换矩阵合并为一个单独的净变换矩阵 找寻不同坐标系之间的坐标转换方 ...

  5. OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

    实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...

  6. 3D几何变换

    3D点:非齐次坐标x(x,y,z) (x表示向量矢量) 齐次坐标:x~=(x~,y~,z~,w~)=w~(x,y,z,1)=w~x~         增广矢量:x—=(x,y,z,1) w~=0时,齐 ...

  7. WPF实现3D翻转的动画效果

    1.前端代码实现 1.1 原理见代码注析 <Grid MouseDown="Grid_MouseDown"> <Viewport3D> <Viewpo ...

  8. 用CATransform3D实现3D效果和制作简单3D动画

    我们先来看下CATransform3D的头文件 struct CATransform3D { CGFloat m11, m12, m13, m14; CGFloat m21, m22, m23, m2 ...

  9. Android OpenGL ES(十二):三维坐标系及坐标变换初步 .

    OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形.但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三 ...

随机推荐

  1. Expert C Programming 阅读笔记(~CH1)

    P4: 好梗!There is one other convention—sometimes we repeat a key point to emphasize it. In addition, w ...

  2. ceph笔记(一)

    一.ceph概述本质上是rados:可靠的.自动的.分布式对象存储特性:高效性(大型的网络raid,性能无限接近raid).统一性(支持文件存储.块存储.对象存储).可扩展性数据库的一个弱点:查表ce ...

  3. Educational Codeforces Round 46 (Rated for Div. 2)

    A - Codehorses T-shirts 思路:有相同抵消,没有相同的对答案+1 #include<bits/stdc++.h> #define LL long long #defi ...

  4. vars 变量预解析

    JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析).当你使用了一个变量,然后不久在函 ...

  5. Vsftpd支持SSL加密传输

    ftp传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题   SSL(Secure Socket Layer)工作于传输层和应用程 ...

  6. elementUI 学习入门之 inputNumber 计数器

    InputNumber 计数器 基础用法 <el-input-number v-model="num2"></el-input-number> v-mode ...

  7. 2017 计蒜之道 初赛 第五场 C. UCloud 的安全秘钥(中等)

    暴力. $O(m*n)$的算法可以通过此题,每次询问$O(m)$扫$S$数组,统计不同数字的个数,每次移动最多只会变化两个数字,如果不同数字个数为$0$,那么答案加$1$. #include < ...

  8. codevs 1214 线段覆盖

    1214 线段覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段 ...

  9. AtCoder Regular Contest 80

    链接 C. 4-adjacent 给定序列$a_i$,询问是否存在一个排列,满足$a_{p[i]}* a_{p[i + 1]}$是4的倍数 贪心构造 首先把只是2的倍数的数拿出来,放在最右边 前面把是 ...

  10. hdu 4352 数位dp+nlogn的LIS

    题意:求区间L到R之间的数A满足A的的数位的最长递增序列的长度为K的数的个数. 链接:点我 该题的关键是记录LIS的状态,学习过nlogn解法的同学都知道,我们每次加入的元素要和前面的比对替换,这里就 ...