假设四面体的四个顶点之一位于原点,另外三个位于向量u、v和w的末尾。如果向量u和v已知,并且u和v、v和w以及w和u之间的角度也已知,则似乎存在w的封闭形式解:旋转向量形成的两个圆锥的交点在关于u轴的u和w角度处,并通过在v和w处旋转矢量相对于v轴的角度。
尽管我在几天内无法提出封闭形式的解决方案,但我希望这是由于我缺乏 3d 几何经验,并且有更多经验的人可能会提出有用的建议。
我遇到了同样的问题,发现 MBo 的回答非常有用。但我认为我们可以多说一点w的值,因为我们可以自由选择要工作的坐标系。特别是,如果我们选择 x 轴在u的方向,并且 xy -plane以包含向量v,则 MBo 的方程组变为:
wx = cos(uw)
vx*wx + vy*wy = cos(vw)
||w|| = 1
这个坐标系给出
vx = cos(uv), vy = sin(uv)
所以我们马上就明白了
_____________________
( cos(vw) - cos(uv) * cos(uw) + / 2 )
w = ( cos(uw), ----------------------------- , - / 1 - cos (uw) - wy*wy )
( sin(uv) \/ )
平方根上的 +- 给出了两种可能的解决方案,当然除非1 - cos^2(uw) - wy^2 <= 0
. 当u和v线性相关(指向同一方向)时,除以sin(uv)
也突出显示了退化情况。
我们可以进行的另一项检查是,如果向量u
和v
是正交的,则已知 wy = cos(vw)
(参见https://math.stackexchange.com/questions/726782/find-a-3d-vector-given-the-angles-of-the -axes-and-a-magnitude)。这不属于上面的表达式(因为cos(uv) = 0
and sin(uv) = 1
)。
没有足够的数据来计算顶点 w 位置。但是有可能找到单位向量w(如果它存在的话)。只需使用标量积属性并求解方程组(我使用 (vx,vy,vz) 作为单位(归一化)向量v的组成部分)
vx*wx+vy*wy+vz*wz=Cos(v,w angle)
ux*wx+uy*wy+uz*wz=Cos(u,w angle)
wx^2+wy^2+wz^2=1 //unit vector
这个系统可以给我们: 没有解决方案(锥体不重叠);一种解决方案(锥体接触);两种解决方案(两条射线作为锥面相交)