Math 3D数学:从查找和向上正交向量计算倾斜(滚动)角度

Math 3D数学:从查找和向上正交向量计算倾斜(滚动)角度,math,3d,euler-angles,Math,3d,Euler Angles,我希望这是问这个问题的合适位置,这个问题是最简单的,但用纯数学而不是图形表示(至少我希望我正确地将问题转化为数学) 考虑到: 两个正交向量:Up(ux,uy,uz)和Look(lx,ly,lz) 垂直于外观的平面P(因此包括向上) Y1是Y(垂直轴)沿P的投影 问题:Y1和Up之间的角度值是多少 正如数学家们所同意的,这是一个非常基本的问题,但我已经挠头至少两周了,无法想象如何将Y投影到p上。。。也许现在太老了,无法找到解决学校练习的方法 我在找三角解,不是用矩阵的解。谢谢 编辑:我发现我需

我希望这是问这个问题的合适位置,这个问题是最简单的,但用纯数学而不是图形表示(至少我希望我正确地将问题转化为数学)

考虑到:

  • 两个正交向量:Up(ux,uy,uz)和Look(lx,ly,lz)
  • 垂直于外观的平面P(因此包括向上)
  • Y1是Y(垂直轴)沿P的投影
问题:Y1和Up之间的角度值是多少

正如数学家们所同意的,这是一个非常基本的问题,但我已经挠头至少两周了,无法想象如何将Y投影到p上。。。也许现在太老了,无法找到解决学校练习的方法

我在找三角解,不是用矩阵的解。谢谢


编辑:我发现我需要确定角度的符号,相对于旋转轴,旋转轴必须是Look。我在我的链接问题上发布了最终代码(见上面的链接)。感谢那些帮助过我的人。非常感谢您的时间。

您需要了解3D空间中的矢量。我认为,对这些,特别是点积和叉积的基本理解,会让你理清头绪。找一本基础向量教科书

两个正交的向量:向上 (ux,uy,uz)和Look(lx,ly,lz)

正交向量有一个零点积

垂直于平面p的平面 查看(因此包括向上)

如果你把Look的叉积取到Up,你会得到第三个向量,它和Up一起定义了垂直于Look的平面

Y1是Y的投影 (垂直轴)沿P向上看


我不知道你在这里得到了什么,但是任何向量的点积都会给出它在外观方向上分量的大小。

这是一个相对简单的向量数学问题。使用获取Y1,然后使用获取Y1和向上之间的角度


这个方程很容易用任何语言实现,但如果你问这类问题,你可能打算做更多的重负荷向量数学,在这种情况下,我建议尝试寻找第三方库。

我只是在纸上做这件事。我希望这是对的

让我们假设向上看是标准化的,即长度1。假设平面P包含原点,L是它的法线。Y是(0,1,0)

若要将Y投影到p上,请找到它到p的距离

d = Y dot L = ly
…然后按-d缩放法线,得到Y1(即Y在p上的投影)

现在标准化Y1,即按(1/长度)缩放它。如果它的长度是0,那么你就不走运了

Y1和Up的点积=角度的余弦。所以

angle = acos(Y1 dot Up)
  • 两个正交向量:Up(ux,uy,uz)和Look(lx,ly,lz)
  • 垂直于外观的平面P(因此包括向上)
  • Y1是Y(垂直轴)沿P的投影
我假设这是单位向量。设Y=(0,1,0)。
让我们找到Y1

Y1=Y-(Y*外观)*外观 Y1=Y-Y*外观 Y1=(-lylx,1-lyly,-ly*lz)

注意,当Look为(0,1,0)或(0,-1,0)时,Y1将为(0,0,0)

正如Detmar所说,通过对Y1进行归一化,并找到Y1*Up(其中*是点积)的Arcos,求出Y1和Up之间的角度。

如果Y=(0,1,0),则

Y1=(-lylx,1-lyly,-ly*lz)

|Y1 |=sqrt(Y1x^2+Y1y^2+Y1z^2)

|向上|=sqrt(Upx^2+Upy^2+Upz^2)


倾斜角度=(Y1xUpx+Y1yUpy+Y1zUpz)/(| Y1 | |向上|)

谢谢,我知道它们,至少我知道它们是什么。我也知道什么是四元数或矩阵。但我仍然不知道如何解决这个三角问题。是吗?是的,我喜欢。我发现很难相信那些自称懂四元数和矩阵的人解决不了这样的问题。我觉得不太对。每个人都可以读一本关于3D数学的书,或者马丁·贝克(Martin Baker)的漂亮页面,我已经完成了所有的工作,第二天我就抛出了一些聪明的词汇,比如正交性、交叉积或四处谈论,但这并不意味着知道如何解决问题。我不明白什么是难以置信的。我很难准确地描述Y1是什么,你有一组样本坐标吗?兰斯,我没有一个例子。然而,这个想法是这样的:最初的Look等于Z,Up等于Y。我将Look向上旋转10°(例如),Y和Up仍然在同一平面上,垂直于Look,Y1等于Y,Y1向上的角度是10°(倾斜角度)。如果现在我将这对眼睛向上旋转10°(俯仰),Y不再是垂直平面上的,我无法测量倾斜角度(这是我想知道的)。我需要在垂直于外观的平面上投影Y(Y1是投影)。然后,倾斜角度是Y1向上的角度。我画了这个,并认为我有它,但后来我意识到,在你在评论中给出的例子中,倾斜角度最终是相同的10度,因为当你绕X轴旋转时,向上和Y1之间的角度永远不会改变。请提供更多的细节。好的,我知道我需要什么,并给出了你需要的公式。谢谢。我同意你建议的两个步骤。我使用的是WPF,Vector3D有一个AngleBetween方法,所以这个操作非常简单。问题只是Y1的值,我无法计算。如果我必须沿着其中一个X,Z轴投影,我会知道怎么做,但不会沿着外观。你能不能帮我提供Y1x、Y1y和Y1z的公式?我被告知这是基础数学,但到目前为止还没有人提供神奇的公式。如果你知道的话,我很感激并同意你回答这两个问题。德特玛,谢谢。这正是我想要的答案。汤姆改进了你的答案,但我会优先考虑你的答案,因为你先回答了。我希望有可能把汤姆列为
angle = acos(Y1 dot Up)