TA的每日心情 | 开心 2020-3-20 17:50 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
楼主 |
发表于 2020-4-3 10:50:18
|
显示全部楼层
本帖最后由 liyihongcug 于 2020-4-8 10:06 编辑
根据物体的起始位置(经度、纬度、高度)和目的位置获取物体的旋转 quat
当前的计算测试在osg和webgl多端测试验证结果
问题集中在这里:
有个osg问题四元数欧拉角转换问题讨论 死活总有一个负数符号与实际背离
{x: -0.0528416077945538, y: -0.3545720185955853, z: -0.34854906127364393, w: 0.8660254037844387}
osg::Vec3 QuaternionToVector3(osg:uat _q)
{
osg::Vec3 v(
atan( (2*(_q.w()*_q.x() + _q.y()*_q.z())) / (1- 2*( pow(_q.x(),2) + pow(_q.y(),2) ) ) ),
asin( 2*(_q.w()*_q.y()-_q.z()*_q.x()) ),
atan( (2*(_q.w()*_q.z() + _q.x()*_q.y())) / (1- 2*( pow(_q.y(),2) + pow(_q.z(),2) ) ) )
);
return v;
}
实际heading: 0.8419220914223688, pitch: 0.7088649026650486, roll: 0.20650593768060643}
结果有错VM2946:4 heading=-0.8419220914223688 pitch=-0.7088649026650486 roll=0.20650593768060643
为何出现heading pitch符号与WEBGL的符号不同的情况
原因在于
Heading就是yaw,即偏航的意思。则相机的Heading/pitch/roll与飞机类似:
Heading=yaw,表示相机绕Up轴旋转,Up轴为+Z轴,且定义绕-Z轴旋转为正。
Pitch,表示相机绕Right轴旋转,Right轴为-Y轴,且定义绕-Y轴旋转为正。
Roll,表示相机绕Direction轴(视线方向)旋转,Direction轴为+X轴,且绕+X轴旋转为正。
权威:原文
*
* Computes a rotation from the given heading, pitch and roll angles. Heading is the rotation about the
* negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about
* the positive x axis.
*
result.heading = -Math.atan2(numeratorHeading, denominatorHeading);
result.roll = Math.atan2(numeratorRoll, denominatorRoll);
result.pitch = -Math.asin(test);
确认一点
广义欧拉角=卡尔丹角
欧拉角:章动角θ、旋进角(即进动角)ψ和自转角j
卡尔丹角:俯仰角、偏航角、滚转角=楼主所说的姿态角 ================ 准确的说还不是欧拉角 是姿态角
欧拉角是用来唯一地确定定点转动刚体位置的三个一组独立角参量,由章动角θ、进动角ψ和自转角φ组成,为L.欧拉首先提出,故得名。它们有多种取法,下面是常见的一种。
如图所示,由定点O作出固定坐标系Oxyz以及固连于刚体的坐标系Ox'y'z'。以轴Oz和Oz'为基本轴,其垂直面Oxy和Ox'y'为基本平面.由轴Oz量到Oz'的角度θ称为章动角。平面zOz'的垂线ON称为节线,它又是基本平面Ox'y'和Oxy的交线。在右手坐标系中,由ON的正端看,角θ应按逆时针方向计量。由固定轴Ox量到节线ON的角度ψ称为进动角,由节线ON量到动轴Ox'的角度φ称为自转角。由轴Oz和Oz'正端看,角ψ和φ也都按逆时针方向计量。欧拉角(ψ,θ,φ)的名称来源于天文学。
从左右手坐标系和作用对像出发就可以捋清该如何推导和使用这些矩阵了。对右手系而言,定义的正向转动为绕旋转轴的逆时针方向,所以当作用对像(或叫旋转对象)
由固定轴Ox量到节线ON的角度ψ称为进动角,由节线ON量到动轴Ox'的角度φ称为自转角ψ)
理论上都应是让各轴的正向(X轴向右、Y轴向下、Z轴面向自己)指向自己,顺时针(正角度值)/逆时针(负角度值)转
|
|