3d 如何计算方位角&;使用cam四元数相对于摄影机的对象高程。。。?

3d 如何计算方位角&;使用cam四元数相对于摄影机的对象高程。。。?,3d,camera,vector-graphics,quaternions,3d,Camera,Vector Graphics,Quaternions,我有一个相机四元数(a,b,c,d)和一个凸轮位置(camX,camY,camZ) 我有一个具有三维坐标(x,y,z)的对象 我需要计算物体相对于cam视图方向和平面的方位角和仰角 第一个问题 如果我把物体放在视图的中心,旋转凸轮,平移它,我应该有相同的方位值,对吗?? 我没有 第二个问题,计算。 我在做物体坐标-凸轮位置,以便将物体平移到凸轮上。 我取得到的坐标,用四元数和它的共轭数做三明治积。(我按照下面的伪代码:) 然后,我得到一个向量结果,取X&Z分量,然后计算atan2 看起来对吗 任

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

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

第一个问题 如果我把物体放在视图的中心,旋转凸轮,平移它,我应该有相同的方位值,对吗?? 我没有

第二个问题,计算。 我在做物体坐标-凸轮位置,以便将物体平移到凸轮上。 我取得到的坐标,用四元数和它的共轭数做三明治积。(我按照下面的伪代码:)

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

看起来对吗


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

你所描述的第二个计算似乎非常接近正确,但有几个基本假设需要你验证。我一会儿再讨论这些问题。然而,你的第一个问题毫无意义

旋转和平移几乎总是会更改方位角值。如果您正直视对象,
方位==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作为对象来进行计算@胶子是的,如果你绕着物体旋转,同时仍然面对它,方位角和仰角不会改变。当你用四元数变换向量时,你用前导零来增加向量,就像你说的,假设你的四元数的顺序是[w,x,y,z]。有时四元数的顺序为[x,y,z,w]。你需要知道你有哪些。谢谢你的帮助,@JCooper。我将在接下来的几个小时内实施。今天正在准备2场音乐现场演出。。是的。我的相机处理器的四元数是w,x,y,z,只是为了确保我正确理解了汉密尔顿的四元数。。。使用它们,我不会有任何奇点和万向节锁对吗?@glion如果你把很多四元数相乘在一起,你需要小心地重新规范化。如果四元数不是单位长度,可能会发生一些奇怪的事情。你是对的,四元数本身不会受到万向节锁的影响。然而,有时人们在使用四元数时仍然会遇到万向节锁,因为他们用欧拉角构建四元数。所以不要那样做。我能想到的唯一一次四元数的奇点是当你尝试在两个四元数之间插值,它们代表180度的旋转。这可能不是问题。