两个四元数,其角度分别是:PI*2-PI/20 和 PI/20,
其中心插值我希望得到角度为0的四元数,事实上得到却是PI。
郁闷呀,这是不是四元数本身设计的缺陷?//1 定义旋转轴,随便给个数
CArray4 axis;
axis.Set(1,1,1);
axis.Normalize();//2 准备两个四元数a和b
CQuaternion a,b,c;
a.FromAxisAndAngle(axis,PI*2-PI/20);
b.FromAxisAndAngle(axis,PI/20);//3 做插值
QuaternionSlerp(c,a,b,0.5);//4 查看结果
double angle;
c.ToAxisAndAngle(axis,angle);这里的angle=PI
另外,把
QuaternionSlerp(c,a,b,0.5);
改为
QuaternionSlerp(c,b,a,0.5);
结果不变!
其中心插值我希望得到角度为0的四元数,事实上得到却是PI。
郁闷呀,这是不是四元数本身设计的缺陷?//1 定义旋转轴,随便给个数
CArray4 axis;
axis.Set(1,1,1);
axis.Normalize();//2 准备两个四元数a和b
CQuaternion a,b,c;
a.FromAxisAndAngle(axis,PI*2-PI/20);
b.FromAxisAndAngle(axis,PI/20);//3 做插值
QuaternionSlerp(c,a,b,0.5);//4 查看结果
double angle;
c.ToAxisAndAngle(axis,angle);这里的angle=PI
另外,把
QuaternionSlerp(c,a,b,0.5);
改为
QuaternionSlerp(c,b,a,0.5);
结果不变!
解决方案 »
- 如何解决拉线画线后刷新严重闪烁的问题
- time控件,数据库时间,CTime。。。的时间格式不一样如何互相通信?
- 请问,list view 鼠标经过某项时怎么增加一个按钮条, 有图示
- 工作经验五年多,今年拿了个系统分析师.做VC开发五年.在深圳工作,大家觉得工资应是多少才合理.
- 使用ADO连接oracle 10g,当将网线拔掉之后在重新插入网线的时候,ADO所有的操作数据库操作都会出错,为什么
- http://www.codeproject.com/buttonctrl/button_tute.asp编译不通过哈
- SDK中绘制平面坐标,还要有数字表示,怎么绘制?
- 关于com书籍的推荐
- 问大家一个关于网络连接错误的问题(很简单的)!在线,解决即给分!
- CInternetSession设置SendRequest请求超时时间,是否只能使用WinInet API
- _cvUpdateMotionHistory//opencv2.3.2如何使用这个函数
- MFC CFormView的控件上绘图的问题
你写的哪些函数我都没见过,我是使用D3DX库,四元数操作没有问题,所以只能猜测一下,四元数定义的旋转是以右手定则为正方向的,如果QuaternionSlerp是从小角度向大角度按正方向旋转插值,那结果没有问题。而且不管你的库函数是如何插值的,你完全可以通过调整旋转轴向量的方向自由控制旋转,例如把旋转轴反向。
PI/2弧度 和 PI*3/2弧度
然后插值,权值取0.5,他如果给接果的话只能给一个。但是他明显有两个选择:
PI,0(或者PI*2和0算一个)
你把这两个角度画出来,估计人脑也找不到角平分线。不要拿一百年吓唬我,我们都是理工科的,不是文科的。
文科的答案本身就是含糊的,如果价格100年,那谁说了就算了。
理工科的东西哪怕是1000年的东西,正确和错误也是泾渭分明的。
PI/2+0.00001, PI*3/2-0.00001
结果是PI
而下面两个数
PI/2-0.00001, PI*3/2+0.00001
结果是0(或者PI*2)如果结果是中间结果的话,再去参加别的运算就乱了。如果考虑浮点数舍入误差的话。
很倒霉的。