三维坐标变换矩阵的推导过程

在3D计算机图形学中,我们经常需要使用多个坐标系,因此我们需要知道如何从一个坐标系转到另一个坐标系。在3D计算机图形学中,点(Point)和向量(Vector)的变换是不同的,所以需要分别讨论。

1、向量的变换

如图所示,有两个坐标系A、B和一个向量p。假设我们已经知道了p在坐标系A下的坐标为p= (x,y);现在我们要求p在坐标系B下的坐标,p= (x‘,y‘) 。也就是说,给定一个坐标系下的向量p,如何计算p在另一个坐标系下的坐标呢?

显然,在坐标系A下,p = x*u + y*v;其中u、v为坐标系A下沿着x轴和y轴的单位向量;而在坐标系B下,p = x*u+ y*vB ,其中uB和vB为A坐标系下的x轴和y轴在B坐标系下的向量表示。因此,如果求出u= (ux,uy),vB = (vx,vy),则可以求出p= (x‘,y‘)的值。

相应地,将二维情况推广到三维,即可得到:

如果向量pA = (x , y , z),则pB = x*uB + y*vB + z*wB;其中pA为p在A坐标系下的向量表示,pB为p在B坐标系下的向量表示,uB 、vB 、wB分别为A坐标系下的坐标轴x、y、z在B坐标系下的向量表示。

2、点的变换

点是需要包含位置信息的,因此,点的变换和向量的变换稍微有些不同。

如图所示,在坐标系A下,点p可表示为:p = x*u + y*v + Q ,其中u、v为坐标系A的坐标轴,Q为坐标系A原点的坐标。而在B坐标系下,点p可表示为:p = x*u+ y*vB + Q,其中uB和vB为A坐标系下的x轴和y轴在B坐标系下的向量表示,QB为A坐标系下的原点在B坐标系下的坐标表示。因此,我们只要求出u= (ux,uy),vB = (vx,vy),QB = (Qx,Qy),则可求出点p在B坐标下的坐标表示。

同理,将上述变换推广到三维可得:

如果点pA = (x , y , z),则点pB = x*uB + y*vB + z*wB +Q;其中pA为p在A坐标系下的坐标,pB为p在B坐标系下的坐标,uB 、vB 、wB分别为A坐标系下的坐标轴x、y、z在B坐标系下的向量表示,QB为A坐标系下的原点在B坐标系下的坐标表示。

3、点和向量的矩阵表示

结合1和2可得,

对于向量:

(x‘, y‘, z‘) = x*uB + y*vB + z*wB;

对于点:

(x‘, y‘, z‘) = x*uB + y*vB + z*wB + QB。

使用齐次坐标,我们将以上两式统一表示为:

(x‘, y‘, z‘,w‘) = x*uB + y*vB + z*wB + w*QB。

其中,w=0,为向量的坐标变换;w=1,为点的坐标变换。

令QB = (Qx ,Qy ,Qz ,1), uB = (ux , uy , uz ,0), vB = (vx ,vy ,vz ,0), wB = (wx , wy , wz ,0),则可得坐标系A到坐标系的变换矩阵为

时间: 2024-10-25 18:27:01

三维坐标变换矩阵的推导过程的相关文章

【转】【矩阵】三维坐标旋转矩阵算法

3D数学 ---- 矩阵和线性变换 一般来说,方阵能描述任意线性变换.线性变换保留了直线和平行线,但原点没有移动.线性变换保留直线的同时,其他的几何性质如长度.角度.面积和体 积可能被变换改变了.从非技术意义上说,线性变换可能“拉伸”坐标系,但不会“弯曲”或“卷折”坐标系. 矩阵是怎样变换向量的 向量在几何上能被解释成一系列与轴平行的位移,一般来说,任意向量v都能写成“扩展”形式: 另一种略有差别的形式为: 注意右边的单位向量就是x,y,z轴,这里只是将概念数学化,向量的每个坐标都表明了平行于相

基于OpenCV的立体相机标定StereoCalibration与目标三维坐标定位

说明:以下涉及到的一些公式以及图片来自于Learning OpenCV. 做了快2个月的立体相机标定,遇到了一些问题,也有了一些体会,在这里记下来. 1.在做立体相机标定的时候,标定板的规范与否直接影响到最后标定的结果,进而会影响目标3D坐标重建. 这里说的规范指的是,打印的棋盘格(或者圆点)需要保证每个square都是严格大小一致的,即打印出来后每个棋盘格大小应一样:打印出来的棋盘格要尽量平整的附在某一平面或者玻璃板上,然后才能用来拍摄标定图像:测量squareSize的时候,要尽可能的精确,

三维坐标下的旋转

三维坐标的旋转有以下几种常见的表示形式:旋转向量,旋转矩阵,欧拉角,四元数,下面对这四种表示形式及其之间的转换进行介绍 旋转向量 通常为3x1的列向量,向量方向即为旋转轴,向量的模表示绕轴逆时针旋转的角度,如旋转向量v=[a,b,c],那么旋转角度theta=sqrt(a2+b2+c2),旋转轴z=[a/theta, b/theta, c/theta] 旋转矩阵 旋转矩阵用3x3的矩阵表示,旋转矩阵有一些很好的性质 旋转矩阵的逆矩阵是它的转置,即 旋转矩阵是正交矩阵,且行列式是单位1      

Y combinator 的推导过程

最近在看<暗时间>,书中有Y组合子的推导过程,初看时很难理解,这里记录一下加深记忆,我们使用Scheme语言的语法. 我们知道Scheme中可以这样定义递归函数 (define (func n) (if (= n 0) 1 (* n (func (- n 1))))) 但是我们知道define这个函数只起到了一个语法糖的效果,再对应lambda表达式还未知的时候是不能使用这个函数. 接下来我们只通过使用lambda表达式来推导出递归函数. 我们先做一下尝试 (lambda (n) (if (=

poj3682:数学期望,O(1)做法附推导过程

这几天一直在磨蹭这题..第一个答案很容易,但在第二个答案我无法算出来了,于是只好求助于Zayin.Zayin又求助于我们年级里面的一个研究生数学老师..而现在终于算出来了,我看了看,自己也推出来几次了,先看题:) King Arthur's Birthday Celebration Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2921 Accepted: 926 Description King Arthur is an

1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

1014 C语言文法定义与C程序的推导过程  程序:冒泡算法C程序(语法树)1 阅读并理解提供给大家的C语言文法文件. 2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 3 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图(完整图片) 1 #include <stdio.h> 2 3 main() 4 { 5 int i,j,temp; 6 int a[10]; 7 8 for(i=0;i<10;i++) 9 scanf

利用MATLAB计算三维坐标序列距离误差程序

1.三维坐标储存在文件中,格式如下: 各坐标间的距离真值是一定值,计算相邻距离的标准差. 2.MATLAB程序如下: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 名称:caculateAccuracy.m % 功能:读取三维世界坐标,计算精度 % 作者:LYC % 单位:中科院苏州医工所 % 日期:2014.5.5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

BP神经网络推导过程详解

BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 下图为一典型的多层神经网络. 通常一个多层神经网络由L层神经元组成,其中:第1层称为输入层,最后一层(第L层)被称为输出层,其它各层均被称为隐含层(第2层~第L-1层). 令输入向量为: \[ \vec x = [x_1 \quad x_2 \quad \ldots \quad x_i \quad

摄像机标定用于机械臂抓举等(利用标定将图像上的点映射为三维坐标)

在实验室或者是工程上,我们常常需要将拍摄到的图像的二维图像坐标来计算三维坐标. 如上图所示,我们有上图这样的一副图片.我们需要将物体和机械臂的三维位置算出来,使得机械臂能够精确的抓住物体. 我们采用张正友标定的方法标定出内外参数,利用其内参与外参数算出其对应的三维坐标.具体公式略!可以参考张PAMI的论文. /*/ //author:YeahPingYE //function: //time:2014/11/25 // // // // // //*/ #include<highgui.h>