我有一个相机四元数(a,b,c,d)和一个凸轮位置(camX,camY,camZ) 我有一个3d坐标(x,y,z)的对象
我需要计算相对于凸轮视图方向的物体的方位角,仰角。平面上。
第一个问题 如果我把对象放在我的视图中心,我旋转凸轮,翻译它,我应该有相同的方位角值,对吧? 我没有。
第二个问题,计算。 我正在做对象坐标 - 凸轮位置,以便将对象转换为凸轮。 我取得了最终的坐标,并用四元数及其共轭制作三明治产品。 (我在伪代码后跟着这个:http://fr.wikipedia.org/wiki/Quaternions_et_rotation_dans_l'espace)然后,我有一个矢量结果,我拿X& Z分量并计算atan2
看起来是对的吗?
任何线索或解释都会对我的斗争有所帮助
答案 0 :(得分:2)
您所描述的第二个计算似乎非常接近正确,但您应该验证一些基本假设。我马上就会讨论这些。但是,你的第一个问题没有意义。
旋转和平移几乎总是会改变方位角值。如果您直视对象azimuth==0
。如果然后向左旋转90°,方位角也明显改变了90°。如果你向前迈出一步(长度x
),你的方位角刚刚获得了额外的atan(x/d)
度(其中d
是物体在你前方的原始距离)。
至于找到方位角和仰角,你的计算取决于有关世界默认方向的假设。即,如果您的相机坐标是[0,0,0],四元数是身份旋转,那么相机面向的方向和方向是什么?通常,“向上”为+y
,向前为-z
。如果是这种情况,那么你将这样计算:
p = q'*(obj-cam)*q
az = atan2(p.x,-p.z)
el = asin(p.y/sqrt(p.x*p.x + p.y*p.y + p.z*p.z))
其中q'
是四元数共轭/反向(只是否定q.w
),*
是四元数乘法(向量的w
分量设置为零)。