求特定几何变换

问题

如何求一个三维的正交变换,它把已知向量 (a,b,c)T (a2+b2+c2=1) 变换为 (0,0,1)T?

解答

这样的正交变换不是唯一的。因为有太多种可能。

我比较感兴趣的是两种:旋转反射

反射

垂直于 OAZ 所在平面,并且等分∠AOZ的平面作为镜面时的反射满足条件。

首先确定这个平面。令为π:px+qy+rz+d=0 记作 (p,q,r,d)T。

不失一般性,不妨假设 p2+q2+r2=1; 因为经过 O:(0,0,0) 点,所以 d=0。即: π=(p,q,r,0)T

另外容易知道: AZ 的中点,以及向量 (0,0,1) 和 (a,b,c) 的叉积也在平面上,从而可以用 a,b,c 表示出平面。

(p,q,r,0)T=1(c?a2+b2+c2??????????√)2+a2+b2?????????????????????????√(a,b,c?a2+b2+c2??????????√,0)T

此时可以从Householder矩阵写出4×4齐次反射矩阵,其前3×3主子矩阵是所要的反射:

????????????1?a2a2+b2+c2?ca2+b2+c2??????????√?aba2+b2+c2?ca2+b2+c2??????????√aa2+b2+c2??????????√?aba2+b2+c2?ca2+b2+c2??????????√1?b2a2+b2+c2?ca2+b2+c2??????????√ba2+b2+c2??????????√aa2+b2+c2??????????√ba2+b2+c2??????????√ca2+b2+c2??????????√????????????

旋转

如果是旋转,它就是,以两个向量 (0,0,1) 和 (a,b,c) 的叉积向量为旋转轴向量的旋转矩阵,旋转角是二者的夹角。然后,直接利用这里的公式即可。应该注意的是,旋转轴向量的符号与旋转角的符号应该匹配,所以,需要验算。

1(a2+b2)a2+b2+c2??????????√????????a2c+b2a2+b2+c2??????????√ab(c?a2+b2+c2??????????√)a(a2+b2)ab(c?a2+b2+c2??????????√)a2a2+b2+c2??????????√+b2cb(a2+b2)?a(a2+b2)?b(a2+b2)(a2+b2)c????????

小结

不论是反射平面经过原点的任意三维反射,还是旋转轴经过原点的任意三维旋转,都是正交矩阵。都可以先求齐次坐标下的一般 4×4 的齐次变换矩阵形式之后,直接截取其前 3×3 主子矩阵而得到欧氏坐标下的对应几何变换矩阵。

版权声明:stereohomology原创本文于CSDN博客

时间: 2024-10-11 21:36:19

求特定几何变换的相关文章

MATLAB 单变量函数一阶及N阶求导

1 对一维函数的求导及求特定函数处的变量值 %%最简单的一阶单变量函数进行求导 function usemyfunArray() %主函数必须位于最上方 clc clear syms x %syms x代表着声明符号变量x,只有声明了符号变量才可以进行符号运算,包括求导. %f(x)=sin(x)+x^2; %我们输入的要求导的函数 y = diff(sin(x)+x^2); %代表着对单变量函数f(x)求一阶导数 disp('f(x)=sin(x)+x^2的导数是'); pretty(y);

体验结对开发

一.实验题目 输入一个含N个整数(有正数也有负数)的数组,求数组中最大子数组的和. 二.实验思路 程序分成两个部分: (1):找到数组中所有可能的子数组的和:  采用遍历的方法,假如数组father[]中有5个数a,b,c,d,e, 第一步,求a,a+b,a+b+c,a+b+c+d,a+b+c+d+e: 第二步,求b,b+c,b+c+d,b+c+d+e: 第三步,求c,c+d,c+d+e: 第四步,求d,d+e: 第五步,求e. 通过两层循环来实现. 然后将这些和依次存入另一个数组son[]中.

0618图的整理

第五章  图 5.1      医院设置 codevs 2577:http://codevs.cn/problem/2577/ 源程序名            hospital.???(pas, c, cpp) 可执行文件名        hospital.exe 输入文件名          hospital.in 输出文件名          hospital.out [问题描述] 设有一棵二叉树,如图5-1: 131 /   \ 24  123 /  \ 420 405 其中,圈中的数字表

隐马尔可夫模型和隐含马尔可夫模型的训练

概率论的发展从(相对静态的)随机变量到相对动态的随机过程应该是个很大的飞跃吧! 所谓随机过程,就是随着时间的变化状态转移的过程. 也就是说每一个时刻都对应着一个状态.(这个时刻的)状态到(下一个时刻的)状态的改变的过程,就是(随机)过程. 所谓随机是指,某一个时刻的状态是不能够确切的知道的(动态的,随机的)所以说是随机的. 马尔可夫链(马尔可夫)就是根据随机过程提出的一种假设 那么他是怎么假设的呢? 该过程中,在给定当前知识或信息的情况下,过去(即当前以前的历史状态)对于预测将来(即当前以后的未

BZOJ 2806 cheat

首先这个题目显然是要二分转换成判断可行性的 之后我们考虑DP 设f(i)表示 1->i 熟悉的子串的长度的最大值 那么对于i这个点,要么不在熟悉的子串中,要么在熟悉的子串中 所以得到 f(i)=max(f(i-1),f(j)+i-j); 其中i-j是划分的熟悉的子串的长度,要满足以下条件: 1.i-j>=k (k为二分出来的值) 2.[j+1,i]这段串是给定标准文章库的一个子串 我们又知道若[j+1,i]是一个满足条件的子串,那么[j+2,i]也一定满足条件 假设我们已知最小的p满足[p+1

【PAT L2-001】最短路计数

给定一个无向带权网络,无负边,无重边和自环,每个顶点有一个正数权值.首先求特定原点s到终点d的最短路的个数:然后求所有最短路中顶点权值a[i]之和最大的那条,输出这条路径. 可用dijkstra算法求出所有最短路,用一个pathNum[u]数组记录从s到u的最短路的个数,查找链path[u]保存了到u为止使顶点权值a[i]之和最大的那条路径,sum[u]保存了这条路径的顶点权值和. 对于提交后的第3个测试点,注意更新新引入顶点u的邻居v的距离值dis[v]时,sum[v]无条件更新为sum[u]

SA 例题泛做 解题报告

5月18日下午听了xMinh老师的讲课,作为一个认真听课的好学生,当然要做解题报告了.——题记 Poj 1743 Musical Theme 题目大意:给出 n 个数组成的串,求是否有多个“相似”且不重叠的子串的长度大于等于 5,两个子串相似当且仅当长度相等且每一位的数字差都相等. 解题报告:差分,二分长度 k,扫描 hight 数组,若出现两个后缀的 LCP 长度 >= k 且 sa >= k,return true. Poj 3261 Milk Patterns 题目大意:给定一个长度为

计算机导论-第一部分

------------恢复内容开始------------ 计算机的发展 计算机从0-1, 程序, 递归的思想 到冯诺依曼计算机/到个人计算机环境-并行计算环境-云计算环境 比较重要的抽象手段 语言和编译系统, 解决了人和机器交流的问题 协议和解码器, 解决了机器和机器通信的基础 模型和系统, 解决了业务模型到计算模型的基础 这三种抽象机制是比较核心的基础 数据化思维 数据库, 数据分析, 大数据分析 网络化思维 物联网, 互联网, 深化对这些概念的理解 发展 计算机 --> 计算科学----

odoo前后端交互详解

为了简单叙述,暂时不考虑多个db的情况(主要是懒得说没有db或者多个db实例的情况)当odoo指定数据库开启服务时(也就是odoo-bin -d <some_db_name> ),我们使用chrome的隐身模式访问http://127.0.0.1:8069 1. 输入http://127.0.0.1:8069/之后发生了什么 192.168.1.10, 这个是我的虚机ip地址,返回响应是200,可以通过源代码中, 我们看到 # web/controllers/main.py:435 @http