我正在尝试学习如何使用原点的XYZ坐标,水平和垂直角度以及3d距离来计算点的XYZ坐标。我可以简单地通过将点投影到2D平面上来进行计算,但是在3D中有更简单的方法吗?
我试图了解测量全站仪如何根据测量位置,测量到新点的3d(坡度)距离以及测量的水平和垂直角度来计算新点位置到新点位置。
谢谢,
电子
答案 0 :(得分:6)
只是关于约定的说明:2D polar coordinates经常使用(radius, theta)
,其中theta
是'水平'或者'方位角'角度。其范围从:theta=0
,X轴上的2D点(x,y) = (radius,0)
到XY平面上的theta=2*PI
- 逆时针方向theta
增加。现在混淆事情......
3D spherical coordinates(维持右手坐标系)经常使用坐标:(radius, theta, phi)
。在这种情况下,theta
用于'垂直'或者' zenith'角度,范围从theta=0
(Z轴)到theta=PI
(-Z轴)。 phi
用于方位角。
其他文本将使用不同的惯例 - 但这似乎受到物理学家和(某些)数学文本的青睐。 重要的是你选择一个约定并一直使用它。
在此之后:
radius
:距离点。给定笛卡儿坐标中的(x,y,z)
点,我们得到(毕达哥拉斯)半径:r = sqrt(x * x + y * y + z * z)
,例如 0 <= radius < +infinity
theta
:天顶角,其中theta=0
位于正上方(+ Z轴),theta=PI
位于正下方(-Z轴) ),theta=PI/2
是您认为的“海拔高度”。 0度,例如,
的 0 <= theta <= PI
强>
phi
:方位角,其中phi=0
是&#39;右边&#39; (+ X轴),当您转向&#39;逆时针&#39;,phi=PI/2
(+ Y轴),phi=PI
(-X轴),phi=3*PI/2
( -Y轴)和phi=2*PI
- 相当于phi=0
(回到+ X轴)。例如, 0 <= phi < 2*PI
伪代码:(标准数学库三角函数)
从(radius, theta, phi)
,您可以找到(x,y,z)
点:
x = radius * sin(theta) * cos(phi);
y = radius * sin(theta) * sin(phi);
z = radius * cos(theta);
相反,您可以从 (radius, theta, phi)
找到(x,y,z)
:
radius = sqrt(x * x + y * y + z * z);
theta = acos(z / radius);
phi = atan2(y, x);
注意:在最终的等式中使用atan2
非常重要,不是 atan
!