【问题标题】:How to calculate Azimuth & Elevation of objects relative to camera using cam quaternion ...?如何使用凸轮四元数计算物体相对于相机的方位角和仰角......?
【发布时间】:2012-07-06 23:05:21
【问题描述】:

我有一个相机四元数 (a,b,c,d) 和一个凸轮位置 (camX, camY, camZ) 我有一个具有 3d 坐标 (x,y,z) 的对象

我需要计算物体相对于凸轮视图方向和平面的方位角和仰角。

第一个问题 如果我把对象放在我的视野中心,f我旋转凸轮,平移它,我应该有相同的方位角值,对吧?? 我没有那个。

第二个问题,计算。 我正在做对象坐标 - 凸轮位置,以便将对象转换为凸轮。 我得到了结果坐标,并用四元数及其共轭制作了三明治产品。 (我按照这个伪代码:http://fr.wikipedia.org/wiki/Quaternions_et_rotation_dans_l'espace

然后,我有一个向量结果,我取 X & Z 分量并计算 atan2

看起来对吗?

任何线索或解释都会在我的斗争中帮助我很多

【问题讨论】:

    标签: 3d camera vector-graphics quaternions


    【解决方案1】:

    您描述的第二个计算似乎非常接近正确,但您应该验证几个基本假设。我稍后会讨论这些。但是,您的第一个问题没有意义。

    旋转和平移几乎都会改变方位角值。如果您直视对象,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 分量设置为零)。

    【讨论】:

    • 你好 JCooper。首先,非常感谢您的回答。我的第一个问题是解释得很糟糕,对此我很抱歉。我想说:想象你的摄像头看着你视野中心的物体。 az = 0,el = 0。如果我将相机“围绕”对象移动,通过将对象保持在我的视野中心,我应该仍然有 az=0 & el=0 对吗?这正是我想用我丑陋的英语说的话:-/ 我很快就会实现你给我的东西并让你知道。我有我的凸轮四元数,但我的对象只有 x,y,z.. 我想我必须使用 0,x,y,z 来让对象进行计算..?!
    • @gluon 没错,如果您围绕对象旋转,同时仍然面对它,方位角和仰角不会改变。
    • 当你用一个四元数转换一个向量时,你会用你所说的前导零来增加向量,假设你的四元数被排序为 [w,x,y,z]。有时四元数按 [x,y,z,w] 排序。你需要知道你有哪些。
    • 感谢您的帮助,@JCooper。我将在接下来的几个小时内实施。目前正在准备今天的 2 场音乐现场表演.. 是的。来自我的相机处理程序的四元组是 w,x,y,z 只是为了确保我正确理解了汉密尔顿的四元数......使用它们,我不会有任何奇点和万向节锁定吗??
    • @gluon 如果您将大量四元数相乘,则需要小心重整化。如果四元数不是单位长度,就会发生一些奇怪的事情。你是对的,四元数本身不会受到万向节锁定的影响。然而,有时人们在使用四元数时仍然会遇到万向节锁定,因为他们使用欧拉角构建四元数。所以不要那样做。我唯一能想到四元数产生的奇点是当你试图在两个代表 180 度旋转的四元数之间进行插值时。这里可能不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多