四元数
来源:互联网 发布:网络共享用户账户限制 编辑:程序博客网 时间:2024/05/16 04:39
http://www.cnblogs.com/minggoddess/archive/2010/12/15/1907374.html
世界空间,朝世界原点的朝向移动d ,换到mPosition的所在父空间只需要旋转一定角度,
这个角度应该是世界原点方向和父节点的方向的夹角,正好是父节点世界绝对角度再取反.
(为什么要取反,2个四元数相乘是不能交换的,因为世界节点和父节点夹角 != 父节点和世界节点夹角,正好相反)
mPosition += (mParent->_getDerivedOrientation().Inverse() * d)
/ mParent->_getDerivedScale();
根据这段话 我想 由A 到B的用了 四元数 Orientation 由B到A的话就应该是 Orientation.Inverse()
我知道 quaternion*quaternion是不满足交换律的
vector3*quaternion我明白
我不知道。。。也许是 quaternion*vector3的意思是
A. Multiplying a quaternion by a vector gives us a vector describing the rotational offset from that vector (a rotated vector). For example when one loads the robot.mesh file, by default it points facing UNIT_X. When it has been rotated, we can get its orientation in quaternion form via mNode->getOrientation(). If we then multiply it by Vector3::UNIT_X, we will get a vector pointing in the direction the robot is currently facing.
在看这句话这句话意思很明显 Orientation 是一个旋转量 Orientation *v3得到的是 v3按Orientation 旋转后的向量
有一点 。。。这里讨论的四元数 是ogre的一个类 他有一个operator *参数是vector3表示的意义是 v3按此quaternion旋转后的结果 that's it
而 vector3*quaternion根本就没定义。。。差不多明白了
Vector3 Quaternion::operator* (const Vector3& v) const
{
// nVidia SDK implementation
Vector3 uv, uuv;
Vector3 qvec(x, y, z);
uv = qvec.crossProduct(v);
uuv = qvec.crossProduct(uv);
uv *= (2.0f * w);uuv *= 2.0f;
return v + uv + uuv;
}
实在不想推到 不过只用到了 外积 和向量 应该还是可解的
没有任何矛盾的地方目前
quaternion *quaternion 表示将这些旋转叠加
vector3*quaternion 无定义
quaternion*vector3表示 vector按q旋转
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- 四元数
- map slot 和 reduce slot
- 启用 SharePoint 2010 的匿名用户访问支持
- 导入cocos-ext.h包时 要注意的地方
- 算法珠玑--再看堆排序(Heap Sort)的实现
- 我们都曾经历过:生活教会我的8堂人生课
- 四元数
- Awstats实现站点信息统计
- void main()误区
- #2002 - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 服务器无响应(或者
- 链接
- 由于数据库ojdbc14.jar版本不正确导致ORA-01461问题的解决方法
- 如何解除SVN对文件夹的锁定
- C++编写windows服务学习笔记(转载)
- javaScript学习笔记-Function2