推导quaternion小结中的最后两节结论

1.  p'=qpq-1   利用rotate矩阵和四元数的cross product进行推导

 

 

 

上面求出了 w = 0,  x',同理可求出y', z'(没有完成他们的计算).

 

下面我们来看看rotate矩阵(行向量形式)

 

V' = V * R(n,8).   得出的结果等于 qpq-1.

 

完毕!

 

2. 球面插值(SLERP)与根据四元数的axies-angle pair的定义中angle的线性插值一致么?

 

 http://download.csdn.net/source/3371410 quaternin class source code

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在四元数(quaternion)的数学,可以使用一个4x4的矩阵来表示旋转的变换矩阵。因此,在实现createMatrix函数时,我们需要根据四元数的数学定义和矩阵变换的公式来计算旋转矩阵。 假设四元数为q = [w, x, y, z],则其对应的旋转矩阵为: ``` R = | 1 - 2y^2 - 2z^2 2xy - 2wz 2xz + 2wy 0 | | 2xy + 2wz 1 - 2x^2 - 2z^2 2yz - 2wx 0 | | 2xz - 2wy 2yz + 2wx 1 - 2x^2 - 2y^2 0 | | 0 0 0 1 | ``` 其,w、x、y、z分别表示四元数的实部和虚部,即q = w + xi + yj + zk。 因此,可以使用以下代码实现createMatrix函数: ```python import numpy as np def createMatrix(q): w, x, y, z = q return np.array([ [1 - 2*y**2 - 2*z**2, 2*x*y - 2*w*z, 2*x*z + 2*w*y, 0], [2*x*y + 2*w*z, 1 - 2*x**2 - 2*z**2, 2*y*z - 2*w*x, 0], [2*x*z - 2*w*y, 2*y*z + 2*w*x, 1 - 2*x**2 - 2*y**2, 0], [0, 0, 0, 1] ]) ``` 这个函数会返回一个numpy数组,表示四元数对应的旋转矩阵。 ### 回答2: Quaternion 的 createMatrix 方法是用来根据四元数创建一个旋转矩阵的。四元数是用来描述旋转的一种数学工具,它包含了一个实部和三个虚部。在计算机图形学,四元数经常被用来表示和计算三维空间的旋转。 该方法的实现方式主要涉及以下步骤: 1. 首先,我们需要将四元数进行归一化。这可以通过计算四元数的模长,然后将四元数的实部和虚部分别除以模长来实现。这是为了确保四元数代表了一个单位旋转。 2. 接下来,我们使用四元数的实部和虚部构建旋转矩阵。构建旋转矩阵的方法有多种,常见的一种方式是使用 Rodrigues 公式。Rodrigues 公式可以将四元数转换为一个旋转矩阵,它可以通过四元数的虚部计算得到。 3. 最后,我们需要将旋转矩阵进行转置,因为在 OpenGL ,矩阵的默认排列方式是列主序。转置操作可以将行主序的矩阵转换为列主序。 通过以上步骤,我们可以根据四元数创建一个相应的旋转矩阵。这个旋转矩阵可以用于将一个点或者一个向量进行旋转变换。在计算机图形学,旋转矩阵常用于描述物体在三维空间的旋转操作,因此 createMatrix 方法在三维图形的呈现和动画过程起着重要的作用。 ### 回答3: Quaternion 的 createMatrix 方法是用来将四元数转化为旋转矩阵的。旋转矩阵是一个3x3的矩阵,用来描述三维空间的旋转操作。 在 createMatrix 方法,首先需要提取四元数的各个分量。一个四元数通常由实部 w 和虚部 xi + yj + zk 组成。根据四元数的定义,实部为w的平方加上虚部的平方的平方根。 接下来,根据四元数的分量,可以通过一些数学公式将其转化为旋转矩阵。具体转化方式如下: 1. 根据四元数的实部和虚部计算出一个方向向量: - x = 2 * x / (x^2 + y^2 + z^2) - y = 2 * y / (x^2 + y^2 + z^2) - z = 2 * z / (x^2 + y^2 + z^2) 2. 根据四元数的实部和虚部计算出一个角度: - angle = 2 * acos(w) 3. 根据方向向量和角度计算旋转矩阵的各个分量: - m11 = 1 - 2 * y^2 - 2 * z^2 - m12 = 2 * x * y - 2 * z * sin(angle) - m13 = 2 * x * z + 2 * y * sin(angle) - m21 = 2 * x * y + 2 * z * sin(angle) - m22 = 1 - 2 * x^2 - 2 * z^2 - m23 = 2 * y * z - 2 * x * sin(angle) - m31 = 2 * x * z - 2 * y * sin(angle) - m32 = 2 * y * z + 2 * x * sin(angle) - m33 = 1 - 2 * x^2 - 2 * y^2 最终,createMatrix 方法会返回一个由上述计算得到的旋转矩阵。 通过这种方式,我们可以将四元数转化为对应的旋转矩阵,从而方便使用旋转矩阵来进行三维空间的旋转操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值