(我看到Wikipedia上有一个方程式可以完全满足我的要求,但没有参考文献。我无法确认该方程式的有效性!)
我已经了解了地心纬度和大地纬度之间的区别。
假定已知的半大半圆a
和半小半圆b
半径。如何在给定的大地纬度下计算半径?
我需要某种专家确认(派生,派生链接,专家确认,解释等)。
(我看到Wikipedia上有一个方程式可以完全满足我的要求,但没有参考文献。我无法确认该方程式的有效性!)
我已经了解了地心纬度和大地纬度之间的区别。
假定已知的半大半圆a
和半小半圆b
半径。如何在给定的大地纬度下计算半径?
我需要某种专家确认(派生,派生链接,专家确认,解释等)。
Answers:
这个问题假设地球是椭圆形的。通过围绕其短轴旋转椭圆(按照惯例垂直绘制)来获得其参考表面。这样的椭圆只是一个水平拉伸了一个因子a和垂直拉伸了一个因子b的圆。使用单位圆的标准参数化,
t --> (cos(t), sin(t))
(定义余弦和正弦),我们获得一个参数化
t --> (a cos(t), b sin(t)).
(此参数化的两个组成部分描述了围绕曲线的行程:它们在笛卡尔坐标中指定“时间” t处的位置。)
的测地纬度,˚F,任何点的是角度“向上”品牌于赤道面。当a不同于b时,f的值不同于t的值(沿赤道和极点除外)。
在这张照片中,蓝色曲线是这种椭圆的一个象限(与地球的偏心率相比,被大大放大了)。左下角的红点是其中心。虚线将半径指定为表面上的一点。它的“向上”方向以黑色部分显示:根据定义,该点垂直于该点的椭圆。由于夸张的偏心率,很容易看到“上”不平行于半径。
用我们的术语来说,t与半径相对于水平线的夹角有关,f与黑色段的夹角有关。(请注意,可以从此角度查看表面上的任何点。这使我们能够将t和f都限制在0到90度之间;它们的余弦和正弦为正,因此我们不必担心负公式中的平方根。)
诀窍是要根据f从t参数化转换为1 ,因为就t而言,半径R易于计算(通过勾股定理)。它的平方是点组成部分的平方和,
R(t)^2 = a^2 cos(t)^2 + b^2 sin(t)^2.
为了进行这种转换,我们需要将“向上”方向f与参数t相关联。该方向垂直于椭圆的切线。根据定义,曲线的切线(表示为矢量)是通过区分其参数化获得的:
Tangent(t) = d/dt (a cos(t), b sin(t)) = (-a sin(t), b cos(t)).
(微分计算变化率。我们在曲线周围移动时位置的变化率当然是速度,并且始终沿曲线指向。)
顺时针旋转90度以获得垂直线,称为“法线”矢量:
Normal(t) = (b cos(t), a sin(t)).
该法向矢量的斜率等于(a sin(t))/(b cos(t))(“越过上升”),也是其与水平方向所成角度的正切值
tan(f) = (a sin(t)) / (b cos(t)).
等效地,
(b/a) tan(f) = sin(t) / cos(t) = tan(t).
(如果您对欧几里得几何学有很好的了解,则可以直接通过椭圆的定义获得这种关系,而无需经历任何trig或演算,只需识别出分别由a和b组合的水平和垂直扩展具有改变的效果即可。所有斜率均以此因子b / a表示。)
再看一下R(t)^ 2的公式:我们知道a和b-它们确定椭圆的形状和大小-因此我们只需要找到cos(t)^ 2和sin(t)^ 2就f而言,上述方程式使我们可以轻松完成:
cos(t)^2 = 1/(1 + tan(t)^2)
= 1 / (1 + (b/a)^2 tan(f)^2)
= a^2 / (a^2 + b^2 tan(f)^2);
sin(t)^2 = 1 - cos(t)^2
= b^2 tan(f)^2 / (a^2 + b^2 tan(f)^2).
(当tan(f)无限大时,我们处于极点,因此在这种情况下只需设置f = t。)
这是我们需要的连接。 将cos(t)^ 2和sin(t)^ 2的这些值代入R(t)^ 2的表达式,并简化为
R(f)^2 = ( a^4 cos(f)^2 + b^4 sin(f)^2 ) / ( a^2 cos(f)^2 + b^2 sin(f)^2 ).
一个简单的变换表明,该方程与Wikipedia上的方程相同。因为a ^ 2 b ^ 2 =(ab)^ 2和(a ^ 2)^ 2 = a ^ 4,
R(f)^2 = ( (a^2 cos(f))^2 + (b^2 sin(f))^2 ) / ( (a cos(f))^2 + (b sin(f))^2 )
有趣的是,我的数学文盲解决方案仅用了5分钟的思考和编码就能完成工作,是不是必须要考虑扁平系数而不是一个完美的椭圆模型?
double pRad = 6356.7523142;
double EqRad = 6378.137;
return pRad + (90 - Math.Abs(siteLatitude)) / 90 * (EqRad - pRad);
return E + (P - E) * Abs(Lat) / 90
,因此不必90 - ...
在公式中使用。
至少那是我在美国数据分析和评估中心(DAAC)中为国防部(DoD)高性能计算现代化计划(HPCMP)Wiki找到的公式。它确实说他们从维基百科的条目中大量借用。尽管如此,他们保留该公式的事实还是很重要的。
(b^4 sin(f))^2
应该更改为(b^4 sin(f)^2)
?