查看“半正矢公式”的源代码
←
半正矢公式
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
'''半正矢公式'''是一种根据两点的[[经度]]和[[纬度]]来确定[[大圆距离|大圆上两点之间距离]]的计算方法,在[[導航]]有着重要地位。它是[[球面三角學]]中“半正矢定理”公式的特例,该定理涉及了球面三角形的边和角。 尽管第一份英文版的[[数学用表|半正矢表]]由詹姆斯·安德鲁在1805年印刷出版<ref name="Brummelen_2013">{{Cite book|url=https://books.google.com/books?id=0BCCz8Sx5wkC&pg=PR7|title=Heavenly Mathematics: The Forgotten Art of Spherical Trigonometry|last=van Brummelen|first=Glen Robert|authorlink=Glen Robert van Brummelen|date=2013|publisher=[[Princeton University Press]]|accessdate=2015-11-10|isbn=9780691148922|id=0691148929}}</ref>,但[[弗洛里安·卡喬里]]相信[[José de Mendoza y Ríos]]在1801年就使用过类似的术语<ref name="Ríos_1795">{{Cite book|url=https://books.google.cat/books?id=030t0OqlX2AC|title=Memoria sobre algunos métodos nuevos de calcular la longitud por las distancias lunares: y aplication de su teórica á la solucion de otros problemas de navegacion|last=de Mendoza y Ríos|first=Joseph|authorlink=José de Mendoza y Ríos|publisher=Imprenta Real|year=1795|location=Madrid, Spain|language=es}}</ref><ref name="Cajori_1929">{{Cite book|url=https://books.google.com/books?id=bT5suOONXlgC|title=A History of Mathematical Notations|last=Cajori|first=Florian|authorlink=Florian Cajori|date=1952|publisher=[[Open court publishing company]]|accessdate=2015-11-11|origyear=1929<!-- 1929-03 -->|isbn=978-1-60206-714-1|edition=2 (3rd corrected printing of 1929 issue)|volume=2|location=Chicago, USA|page=172|id=1602067147|quote=The haversine first appears in the tables of logarithmic versines of [[José de Mendoza y Rios]] (Madrid, 1801, also 1805, 1809), and later in a treatise on navigation of [[James Inman]] (1821).}}</ref>。“半正矢”这个名字由[[詹姆斯·英曼]]在1835年创造<ref name="Inman_1835">{{Cite book|url=https://books.google.com/books/about/Navigation_and_Nautical_Astronomy_for_th.html?id=-fUOnQEACAAJ|title=Navigation and Nautical Astronomy: For the Use of British Seamen|last=Inman<!-- Rev. D.D. -->|first=James|authorlink=James Inman|date=1835|publisher=W. Woodward, C. & J. Rivington|accessdate=2015-11-09|origyear=1821|edition=3|location=London, UK}}</ref><ref name="OED_1989_Haversine">{{OED2|haversine}}</ref>。 这个公式正如其名,用半正矢函数表达,通过 <math>\operatorname{haversin}(\theta) = \sin^2(\frac {\theta}{2})</math> 而来。该公式可以用半正矢函数的任意倍数表达,如[[正矢|正矢函数]](半正矢函数的两倍)。在计算机出现之前,为了计算简便,人们会利用对数来计算乘积和利用半正矢函数计算距离,所以在十九和二十世纪初的导航和三角测量书中包含了半正矢值表和对数表。现在,将该公式用半正矢函数表达也很方便,因为它能避免 <math>\sin^2</math> 的系数。 == 半正矢公式 == 对于任何球面上的两点,圆心角的半正矢值可以通过如下公式计算: : <math>\operatorname{hav}(\frac {d}{r})=\operatorname{hav}(\varphi_2-\varphi_1)+\cos(\varphi_1) \cos(\varphi_2) \operatorname{hav}(\lambda_2-\lambda_1)</math> * <math>\operatorname{hav}</math> 是半正矢函数的缩写: : <math>\operatorname{hav}(\theta)=\sin^2(\frac {\theta}{2})=\frac {1-\cos(\theta)}{2}</math> * <math>d</math> 是两点之间的距离(沿大圆,见[[大圆距离|球面距离]]); * <math>r</math> 是球的半径; * <math>\theta_1 \theta_2</math> :点 1 的纬度和点 2 的纬度,以弧度制度量; * <math>\lambda_1 \lambda_2</math> :点 1 的经度和点 2 的经度,以弧度制度量。 左边的等号 <math>\frac {d}{r}</math> 是圆心角,以弧度来度量。 可以通过应用反半正矢函数(如果可以查到值)或通过使用反正弦函数来解出 <math>d</math> : : <math>d = r\operatorname{archav}(h) = 2r\arcsin\left(\sqrt{h}\right)</math> <math>h = \operatorname{hav} \frac {d}{r}</math> ,代入可得: : <math>\begin{align} d &= 2r \arcsin\left(\sqrt{\operatorname{hav}(\varphi_2 - \varphi_1) + \cos(\varphi_1) \cos(\varphi_2)\operatorname{hav}(\lambda_2 - \lambda_1)}\right) \\ &= 2r \arcsin\left(\sqrt{\sin^2\left(\frac{\varphi_2 - \varphi_1}{2}\right) + \cos(\varphi_1) \cos(\varphi_2)\sin^2\left(\frac{\lambda_2 - \lambda_1}{2}\right)}\right) \end{align}</math> 在使用这个公式时,必须确保 <math>h</math> 不超过 1 ( <math>d</math> 只当 <math>h</math> 的值在 0 到 1 间才有意义)。<math>h</math> 仅在球面上两点连线过球心时才为 1 ,当测量精度有限时,会产生较大的计算误差。 <math>d</math> 如果大到接近圆周的一半长度 <math>\pi R</math> 时(这个情况并不常见),一个小错误通常是一个大问题在。虽然还有其他的[[大圆距离]]公式,能够避免这个问题。上述公式有时候用[[反正切]]函数表达,但是 <math>h</math> 接近 1 时这个问题仍然存在。 但是仍有对策来避免上述问题。类似的公式可以使用余弦函数表达(有时亦称为球面余弦定理,但是并非平面[[余弦定理]])而不是半正矢,但如果这两点十分靠近(例如在地球上的一公里外)你可能得到的结果为 <math>\cos{\frac {d}{r}}=0.99999999</math>,导致一系列的误差。而由于半正矢式使用正弦函数,避免了这一问题。所以两个公式应该互补使用。 因为[[地球]]是一个不完美的球体,故当其应用于地球时,无论哪一个公式只是做一个近似测算,“[[地球半径]]” <math>R</math> 在极点地区是 <math>6356.752</math> 公里,在赤道地区为 <math>6378.137</math> 公里。另外,半径曲率在极点处(<math>\approx 6399.594</math> 公里)比在赤道处(<math>\approx 6335.439</math> 公里)大 1% ,所以半正矢公式或者球面余弦定理是不能保证 0.5% 以内的误差。更准确的方法,应该是使用考虑地球[[离心率]]的Vincenty的公式或其他有关地理距离的论文所给出方法。 == 半正矢定理 == [[File:Law-of-haversines.svg|右|缩略图|半正矢定理解球面三角形问题]] 给出一个单位球,一个在表面的球面三角形三个过三点 <math>(u,v,w)</math> 的大圆所围出来的区域。如图,这个球面三角形的三边分别是 <math>a</math>(<math>\mathbf u</math> 至 <math>\mathbf v</math>), <math>b</math> (<math>\mathbf u</math> 到 <math>\mathbf w</math>)和 <math>c</math> (<math>\mathbf v</math> 至 <math>\mathbf w</math>)并且角 <math>C</math> 对边 <math>c</math> 那么有如下关系 <math>\operatorname{hav}(c)=\operatorname{hav}(a-b)+\sin(a) \sin(b) \operatorname{hav}(C)</math><ref name="Korn_2000">{{Cite book|title=Mathematical handbook for scientists and engineers: Definitions, theorems, and formulas for reference and review|last=Korn|first=Grandino Arthur|last2=Korn|first2=Theresa M.|date=2000|publisher=[[Dover Publications, Inc.]]|origyear=1922|isbn=978-0-486-41147-7|edition=3<!-- (based on 1968 edition by McGrawHill, Inc.) -->|location=Mineola, New York, USA|pages=892–893|chapter=Appendix B: B9. Plane and Spherical Trigonometry: Formulas Expressed in Terms of the Haversine Function}}</ref> 由于这是一个单位球,弧长 <math>a</math>、 <math>b</math> 和 <math>c</math> 与两端点同球心构成的圆心角([[弧度]]制)相等。 为了从该定理中得到半正矢公式,只需要考虑一种特殊情况,即 <math>\mathbf u</math> 是[[北极点|北极]],而 <math>\mathbf v</math> 和 <math>\mathbf w</math> 是需要确定距离 <math>\mathbf d</math> 两个点。在这个情况下, <math>a</math> 和 <math>b</math> 由 <math>\frac{\pi}{2} - \varphi_{1,2}</math> 来计算(即 90° - 维度), <math>C</math> 为经度分隔 <math>\Delta \lambda</math> 和 <math>c</math> 为求得的<math>\frac{d}{R}</math>。结合 <math>\sin\left(\frac{\pi}{2} - \varphi\right) = \cos(\varphi)</math>,半正矢公式即可推导得出。 或者可以从球面余弦定理中得出 : <math>\cos(c)=\cos(a)\cos(b)+\sin(a)\sin(b)\cos(C)</math><math /> 当 <math>c</math> 很小时,这个公式精度不高。所以我们可以用 <math>\cos(\theta) = 1 - 2\operatorname{\operatorname{hav}}(\theta)</math> 来替换 ,并引用[[三角恒等式]] <math>\cos(a - b) = \cos(a)\cos(b) + \sin(a)\sin(b)</math>,半正矢定理就能推出。 == 另见 == * {{tsl|en|sight reduction|视觉算法}} == 参考文献 == <references /> == 延伸阅读 == * [[美国人口调查局|美国人口普查局的]] 地理信息系统的问题(内容已被转移到 [http://www.movable-type.co.uk/scripts/GIS-FAQ-5.1.html 什么是最好的方式来计算两点间的距离?]) * R.W.Sinnott的"半正矢的优点", ''Sky and Telescope'' '''68''' (2), 159 (1984). * [http://mathforum.org/library/drmath/view/51879.html 推导半正矢公式],''Ask Dr.Math''(Apr. 20–21,1999)。 * Romuald Ireneus'Scibor-Marchocki, [https://www.webcitation.org/query?url=http://www.geocities.com/ResearchTriangle/2363/trig02.html&date=2009-10-25+09:44:36 球三角形], 初等<span>几何</span>(1997年)。 * W.Gellert,S.Gottwald,M.Hellwich,H.Kästner和H.Küstner的,''The VNR Concise Encyclopedia of Mathematics'',2nd ed., ch. 12(Van Nostrand Reinhold:纽约,1989年)。 == 外部链接 == * [http://rosettacode.org/wiki/Haversine_formula 用的91种编程语言rosettacode.org实现半正矢公式] 或 [http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe 17种编程语言codecodex.com] * 其它在 [http://blog.julien.cayzac.name/2008/10/arc-and-distance-between-two-points-on.html C++]、[http://www.jaimerios.com/?p=39 C(mac os)]、[http://scifunam.fisica.unam.mx/mir/codes.html#haversine Pascal]、[https://stackoverflow.com/a/4913653/1389451 Python]、[https://github.com/kristianmandrup/haversine/blob/master/lib/haversine.rb Ruby]、[http://www.movable-type.co.uk/scripts/LatLong.html JavaScript]、[http://assemblysys.com/geographical-distance-calculation-in-php/ PHP]、[http://samoht.fr/informatique/distance-between-two-points-on-earth-surface-haversine-formula Matlab]、[https://github.com/Lus71/lib_mysqludf_haversine MySQL]中的实现。 * 由任何两者之间的纬度和经度计算距离、方位等。[http://www.movable-type.co.uk/scripts/latlong.html http://www.movable-type.co.uk] [[Category:大地测量学]] [[Category:球面几何学]]
本页使用的模板:
Template:Cite book
(
查看源代码
)
Template:OED2
(
查看源代码
)
Template:Tsl
(
查看源代码
)
返回
半正矢公式
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息