如何计算方位角和使用凸轮四元数相对于相机的物体高度......?

时间:2012-06-23 00:50:45

标签: 3d camera vector-graphics quaternions

我有一个相机四元数(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

看起来是对的吗?

任何线索或解释都会对我的斗争有所帮助

1 个答案:

答案 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分量设置为零)。