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

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

以下使用行向量:

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. Loadrunner报错“Too many local variablesAction.c”解决方法

    问题描述,在Action.c里定义数组时如果数组长度过长,如char a[1024*1024]运行时即会报错: 意思为:太多的局部变量 问题原因及解决方法如下: 1. VuGen对于局部变量可以分配的 ...

  2. Xcode10升级项目报错library not found for -lstdc++.6.0.9

    在升级Xcode10后运行项目会发出报了一个错“library not found for -libstdc++.6.0.9”,很简单,就是因为xocde10后这个libstd++.6.0.9库已经不 ...

  3. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  4. 洛谷P3803 【模板】多项式乘法 [NTT]

    题目传送门 多项式乘法 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: 第一行2个正整数n,m. 接下来一行n+1个数字, ...

  5. python3 爬虫之爬取安居客二手房资讯(第一版)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa import requests from bs4 import Beau ...

  6. navicat批量导入数据

    1.excel表导入数据 根据数据表添加excel表内容 开始导入数据

  7. Linux下burg引导

    用得比较久了,比grub顺手: 安装: sudo add-apt-repository ppa:n-muench/burg; sudo apt-get update; sudo apt-get ins ...

  8. 【lct】bzoj2002 [Hnoi2010]Bounce 弹飞绵羊

    lct板子,此题主要有cut操作和link操作. #include<cstdio> #include<iostream> #include<cstring> #in ...

  9. win7环境下一次浅谈栈溢出

    在我们的生活中,存在的许许多多的漏洞,下面像大家介绍的就是平时比较常见的栈溢出漏洞的实践过程. 下面,我们用一个非常简单的例子来让大家对栈溢出漏洞有个直观的认识. 这是一个简单的密码验证程序,但因为代 ...

  10. hdu 3642 体积并

    题意:求三个矩形体积的并 链接:点我 枚举z #include<stdio.h> #include<iostream> #include<stdlib.h> #in ...