四元数转化为矩阵

 1 /**
 2  *   /  R[ 0]   R[ 1]   R[ 2]   0   3  *   |  R[ 4]   R[ 5]   R[ 6]   0  |
 4  *   |  R[ 8]   R[ 9]   R[10]   0  |
 5  *   \  0       0       0       1  /
 6  */
 7 + (GLKMatrix4)getRotationMatrixFromQuaternion:(CMQuaternion*)quaternion{
 8     float xx = quaternion->x * quaternion->x;
 9     float yy = quaternion->y * quaternion->y;
10     float zz = quaternion->z * quaternion->z;
11     float xy = quaternion->x * quaternion->y;
12     float wz = quaternion->w * quaternion->z;
13     float wy = quaternion->w * quaternion->y;
14     float xz = quaternion->x * quaternion->z;
15     float yz = quaternion->y * quaternion->z;
16     float wx = quaternion->w * quaternion->x;
17
18     float r00 = 1 - 2 * (yy + zz);
19     float r01 = 2 * (xy - wz);
20     float r02 = 2 * (wy + xz);
21     float r03 = 0;
22
23     float r10 = 2 * (xy + wz);
24     float r11 = 1 - 2 * (xx + zz);
25     float r12 = 2 * (yz - wx);
26     float r13 = 0;
27
28     float r20 = 2 * (xz - wy);//不是 xy - wy
29     float r21 = 2 * (yz + wx);
30     float r22 = 1 - 2 * (xx + yy);
31     float r23 = 0;
32
33     float r30 = 0;
34     float r31 = 0;
35     float r32 = 0;
36     float r33 = 1;
37
38     return GLKMatrix4Make(r00,r01,r02,r03,
39                       r10,r11,r12,r13,
40                       r20,r21,r22,r23,
41                       r30,r31,r32,r33);
42 }

本方法是基于Objective-C实现。

时间: 2024-10-21 16:05:57

四元数转化为矩阵的相关文章

poj3735—Training little cats(特殊操作转化为矩阵操作)

题目链接:http://poj.org/problem?id=3735 题目意思: 调教猫咪:有n只饥渴的猫咪,现有一组羞耻连续操作,由k个操作组成,全部选自: 1. g i 给第i只猫咪一颗花生 2. e i 让第i只猫咪吃光它的花生 3. s i j 交换猫咪i与猫咪j的花生 现将上述一组连续操作做m次后,求每只猫咪有多少颗花生? 思路:这道题难点在如何把这种奇怪的操作转化为矩阵操作,网络上看到一个画的很好的图,这里直接偷过来. 现在,对于每一个操作我们都可以得到一个转置矩阵,把k个操作的矩

卷积操作转化成矩阵乘法

参考:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/ 平常都是无脑使用Pytorch提供的nn.Conv2d方法,但是并不关心具体该如何实现,原来是把卷积操作转化成矩阵乘法,而不是真的通过滑动卷积核来做卷积,下面做具体介绍. 首先看一下下面的示意图,左边是输入图像,右边是卷积核(为方便说明,只用了一个卷积核). 下面是用这个卷积核对输入图像做卷积操作,最后得到一个2维的平面 由下图可以看到卷

HDU 1159 Common Subsequence--DP--(转化成矩阵)

题意:找最长公共子序列(不要求连续) 分析:二维dp肯定的,不过我自己用的四层循环,超时:正解是画矩阵,找规律.以后要多注意这种思想 WA了很多遍,原因:1.对数组边界的处理:2.while(1)超时,改成while(cin>>a>>b)就过了 代码: #include<cstring> #include<cstdio> #define max(a,b) a>b?a:b using namespace std; char a[1005],b[1005]

矩阵卷积Matlab(转载)

转载自:http://blog.csdn.net/anan1205/article/details/12313593 两个矩阵卷积转化为矩阵相乘形式--Matlab应用(这里考虑二维矩阵,在图像中对应)两个图像模糊(边缘)操作,假设矩阵A.B,A代表源图像,B代表卷积模板,那么B的取值决定最后运算的结果. Matlab中的应用函数--conv2(二维卷积,一维对应conv) 函数给出的公式定义为: 同一维数据卷积一样,它的实质在于将卷积模板图像翻转(旋转180),这里等同于一维信号的翻转,然后将

HDU 2256 Problem of Precision 数论矩阵快速幂

题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5+2√6)n+(5-2√6)n是一个整数(2√6的偶数次幂总会正负抵消掉),并且(5-2√6)n是小于1的.所以我们就只需要求出Sn-1即可.令 An=(5+2√6)n;  Bn=(5-2√6)n. Sn=An+Bn     Sn为整数. Sn*((5+2√6)+(5-2√6))=Sn*10 Sn*

四元数 Quaternion

最近在重写自己游戏引擎的场景管理模块,重温了一下有关四元数的一些知识,在此做一下简单的笔记. 四元数可以用来准确地描述三维矢量的旋转,并且可以有效地表达多个旋转操作的叠加,因此在三维游戏引擎的场景管理模块中,四元数具有很重要的意义. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/ 一.定义 形如A = ai + bj + ck + d的复数称为四元数,其中i.j.k为虚数(称为四元数的基元),a.b.c.d为实数. 二.常见性质 1.

Python中怎样计算矩阵按逐元素进行相乘???

1 # 对两个同维矩阵进行逐元素相乘 2 def matElementMul(): 3 a=mat([[1,2,3],[4,5,6]]); 4 b=mat([[2,2,3],[2,4,1]]); 5 c=array(a)*array(b); 6 c=mat(c); 7 return c; 必须先将两个矩阵转化为数组形式,然后进行相乘,最后将数组转化为矩阵: 计算结果: 1 >>> c=matElementMul() 2 >>> c 3 matrix([[ 2, 4, 9

POJ3735 Training little cats DP,矩阵快速幂,稀疏矩阵优化

题目大意是,n只猫,有k个动作让它们去完成,并且重复m次,动作主要有三类gi,ei,s i j,分别代表第i只猫获得一个花生,第i只猫吃掉它自己所有的花生,第i只和第j只猫交换彼此的花生.k,n不超过100,m不超过1000,000,000,计算出最后每只猫还剩下多少个花生. 我们假设一个n维向量P,每个分量的值代表这n只猫所拥有的花生数,那么对于gi操作其实就是在第i维分量上加上1:对于ei,那就是在第i维分量上乘以0,说到这里,有木有感觉这很像3D坐标转化中的平移矩阵和缩放矩阵?没错,就是这

HDU2157 How many ways??---(邻接矩阵,图论,矩阵快速幂)

http://acm.hdu.edu.cn/showproblem.php?pid=2157 How many ways?? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3013    Accepted Submission(s): 1154 Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常