这基本上是我的问题。也许我对欧拉角度不够熟悉,我试图做的事情是不可能的。
我在3d空间中有2分。
p1(1,2,3)为了得到这两点的单位向量,我基本上就这样做了。
var productX = (position.X2 - position.X1);
var productY = (position.Y2 - position.Y1);
var productZ = (position.Z2 - position.Z1);
var normalizedTotal = Math.sqrt(productX * productX + productY * productY + productZ * productZ);
var unitVectorX, unitVectorY, unitVectorZ;
if(normalizedTotal == 0)
{
unitVectorX = productX;
unitVectorY = productY;
unitVectorZ = productZ;
}
else
{
unitVectorX = productX / normalizedTotal;
unitVectorY = productY / normalizedTotal;
unitVectorZ = productZ / normalizedTotal;
}
所以现在我有2个3d点的单位向量x y z。
我现在尝试将方向矢量转换为欧拉角。这可能吗。我在这里缺少什么,因为我无法找到有关如何做到这一点的任何好资源。
感谢您的帮助。
有时图片有帮助。
也许这会给我一个更好的例子,说明我想要解决的问题。
给定2分,我确定了一个中点,长度,现在我试图找出要设置的角度,以便圆柱正确地围绕x,y,z轴定向。我想我需要弄清楚所有3个角度不只是1和2是正确的吗?我认为欧拉角从一个方向矢量位穿过你。
答案 0 :(得分:1)
你想要的是从矢量的笛卡尔坐标转换
v = (v_x, v_y, v_z)
到球面坐标r
,ψ
和θ
其中
v = ( r*COS(ψ)*COS(θ), r*SIN(θ), r*SIN(ψ)*COS(θ) )
这是通过以下等式完成的
r = SQRT(v_x^2+v_y^2+v_z^2)
TAN(ψ) = (v_z)/(v_x)
TAN(θ) = (v_y)/(v_x^2+v_z^2)
要获得角度ψ和θ,请使用
中的ATAN2(dy,dx)
函数
ψ = ATAN2(v_z, v_x)
θ = ATAN2(v_y, SQRT(v_x^2+v_z^2))
现在您已经沿方向向量
了j = ( COS(ψ)*COS(θ), SIN(θ), SIN(ψ)*COS(θ) )
你可以从
获得两个垂直向量i = ( SIN(ψ), 0, -COS(ψ) )
k = ( COS(ψ)*SIN(θ), -COS(θ), SIN(ψ)*SIN(θ) )
这三个向量构成3×3旋转矩阵的列
| SIN(ψ) COS(ψ)*COS(θ) COS(ψ)*SIN(θ) |
E =[i j k] = | 0 SIN(θ) -COS(θ) |
| -COS(ψ) SIN(ψ)*COS(θ) SIN(ψ)*SIN(θ) |
就欧拉角而言,上述等同于
E = RY(π/2-ψ)*RX(π/2-θ)
两个点p_1=(3,2,3)
和p_2=(5,6,4)
定义了矢量
v = (5,6,4) - (3,2,3) = (2,4,1)
注意:我使用v[i]
的符号作为向量的i-th
元素,如上面的v[1]=2
所示。这既不是基于零的C
,Python
,也不像VB
,FORTRAN
或MATLAB
那样使用parens ()
作为索引子>
使用上面的表达式
r = √(2^2+4^2+1^2) = √21
TAN(ψ) = 1/2
TAN(θ) = 4/√(2^2+1^2) = 4/√5
ψ = ATAN2(1,2) = 0.463647
θ = ATAN2(4,√5) = 1.061057
现在找到方向向量
j = ( COS(ψ)*COS(θ), SIN(θ), SIN(ψ)*COS(θ) ) = (0.4364, 0.87287, 0.21822 )
i = ( SIN(ψ), 0, -COS(ψ) ) = (0.44721, 0, -0.89443 )
k = ( COS(ψ)*SIN(θ), -COS(θ), SIN(ψ)*SIN(θ) ) = (0.78072, -0.48795, 0.39036)
将方向向量作为局部列到世界坐标转换(旋转)
E[1,1] = i[1] E[1,2] = j[1] E[1,3] = k[1]
E[2,1] = i[2] E[2,2] = j[2] E[2,3] = k[2]
E[3,1] = i[3] E[3,2] = j[3] E[3,3] = k[3]
| 0.447213595499957 0.436435780471984 0.780720058358826 |
| |
E = | 0 0.872871560943969 -0.487950036474266 |
| |
| -0.894427190999915 0.218217890235992 0.390360029179413 |