Π€ΠΎΡ€ΠΌΡƒΠ»Π° расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ – ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ нахоТдСния, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ расстояниС ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄ΠΎ прямой

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ВычислСниС расстояния ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π½Π° сфСрС

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ расстояния ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ

Π”Π»ΠΈΠ½Π° Π΄ΡƒΠ³ΠΈ большого ΠΊΡ€ΡƒΠ³Π° – ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ находящимися Π½Π° повСрхности сфСры, ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ вдоль Π»ΠΈΠ½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅ΠΉ эти Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ (такая линия носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ€Ρ‚ΠΎΠ΄Ρ€ΠΎΠΌΠΈΠΈ) ΠΈ проходящСй ΠΏΠΎ повСрхности сфСры ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ повСрхности вращСния. БфСричСская гСомСтрия отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π­Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎΠΉ ΠΈ уравнСния расстояния Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π’ Π­Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎΠΉ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ, ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ – прямая линия. На сфСрС, прямых Π»ΠΈΠ½ΠΈΠΉ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚. Π­Ρ‚ΠΈ Π»ΠΈΠ½ΠΈΠΈ Π½Π° сфСрС ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΡ€ΡƒΠ³ΠΎΠ² – окруТностСй, Ρ†Π΅Π½Ρ‚Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ сфСры.

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π·ΠΈΠΌΡƒΡ‚ β€” Π°Π·ΠΈΠΌΡƒΡ‚, взяв ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ двиТСния ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ А, слСдуя ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ ΠΊΡ€ΡƒΠ³Ρƒ Π½Π° ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ B, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠ° B. ΠŸΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ A Π² Ρ‚ΠΎΡ‡ΠΊΡƒ B ΠΏΠΎ Π»ΠΈΠ½ΠΈΠΈ большого ΠΊΡ€ΡƒΠ³Π° Π°Π·ΠΈΠΌΡƒΡ‚ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ B постоянно мСняСтся. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π·ΠΈΠΌΡƒΡ‚ [angles-rhumb.html ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ постоянного], слСдуя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ, Π°Π·ΠΈΠΌΡƒΡ‚ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π½Π΅ мСняСтся, Π½ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ слСдования

Π½Π΅ являСтся ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΌ расстояниСм ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ.

большой ΠΊΡ€ΡƒΠ³

Π§Π΅Ρ€Π΅Π· Π»ΡŽΠ±Ρ‹Π΅ Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° повСрхности сфСры, Ссли ΠΎΠ½ΠΈ Π½Π΅ прямо ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄Π°ΠΌΠΈ), ΠΌΠΎΠΆΠ½ΠΎ провСсти ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ большой ΠΊΡ€ΡƒΠ³. Π”Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ большой ΠΊΡ€ΡƒΠ³ Π½Π° Π΄Π²Π΅ Π΄ΡƒΠ³ΠΈ. Π”Π»ΠΈΠ½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ Π΄ΡƒΠ³ΠΈ – ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. ΠœΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ-Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ провСсти бСсконСчноС количСство Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΡ€ΡƒΠ³ΠΎΠ², Π½ΠΎ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° любом ΠΊΡ€ΡƒΠ³Π΅ ΠΈ Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ окруТности ΠΊΡ€ΡƒΠ³Π°, ΠΈΠ»ΠΈ pi*R, Π³Π΄Π΅ R – радиус сфСры.

расстояниС большого ΠΊΡ€ΡƒΠ³Π°

На плоскости (Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚), большиС ΠΊΡ€ΡƒΠ³ΠΈ ΠΈ ΠΈΡ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ упомянуто Π²Ρ‹ΡˆΠ΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π΄ΡƒΠ³ΠΈ Π²ΠΎ всСх проСкциях, ΠΊΡ€ΠΎΠΌΠ΅ гномоничСской, Π³Π΄Π΅ большиС ΠΊΡ€ΡƒΠ³ΠΈ β€” прямыС Π»ΠΈΠ½ΠΈΠΈ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ самолСты ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ авиатранспорт всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ минимального расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ для экономии Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Ρ‚ осущСствляСтся ΠΏΠΎ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ большого ΠΊΡ€ΡƒΠ³Π°, Π½Π° плоскости это выглядит ΠΊΠ°ΠΊ Π΄ΡƒΠ³Π°.

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Нью-Π™ΠΎΡ€ΠΊ β€” ПСкин

Π€ΠΎΡ€ΠΌΠ° Π—Π΅ΠΌΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описана ΠΊΠ°ΠΊ сфСра, поэтому уравнСния для вычислСния расстояний Π½Π° большом ΠΊΡ€ΡƒΠ³Π΅ Π²Π°ΠΆΠ½Ρ‹ для вычислСния ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π½Π° повСрхности Π—Π΅ΠΌΠ»ΠΈ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ.

ВычислСниС расстояния этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ эффСктивно ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, Ρ‡Π΅ΠΌ вычислСниС Π΅Π³ΠΎ для спроСктированных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… систСмах ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, для этого Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ гСографичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ прСобразования) ΠΈ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ, Ссли Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹, ΠΌΠΎΠ³Ρƒ привСсти ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ искаТСниям Π΄Π»ΠΈΠ½ Π² силу особСнностСй ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… искаТСний.

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ описываСт Ρ„ΠΎΡ€ΠΌΡƒ Π—Π΅ΠΌΠ»ΠΈ Π½Π΅ сфСра, Π° эллипсоид, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассматриваСтся вычислСниС расстояний ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° сфСрС, для вычислСний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сфСра радиусом 6372795 ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС вычислСния расстояний порядка 0.5%.

БущСствуСт Ρ‚Ρ€ΠΈ способа расчСта сфСричСского расстояния большого ΠΊΡ€ΡƒΠ³Π° (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅).

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] БфСричСская Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° косинусов

Π’ случаС ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… расстояний ΠΈ нСбольшой разрядности вычислСния (количСство Π·Π½Π°ΠΊΠΎΠ² послС запятой), использованиС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ошибкам связанным с ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ. ГрафичСскоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ» здСсь ΠΈ Π΄Π°Π»Π΅Π΅ β€” ΠΈΠ· Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ.

β€” ΡˆΠΈΡ€ΠΎΡ‚Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π° Π΄Π²ΡƒΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…

β€” Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎ Π΄ΠΎΠ»Π³ΠΎΡ‚Π΅

β€” угловая Ρ€Π°Π·Π½ΠΈΡ†Π°

Для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡƒΠ³Π»ΠΎΠ²ΠΎΠ³ΠΎ расстояния Π² мСтричСскоС, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ³Π»ΠΎΠ²ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° радиус Π—Π΅ΠΌΠ»ΠΈ (6372795 ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²), Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ расстояния Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π²Π½Ρ‹ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ радиус (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” ΠΌΠ΅Ρ‚Ρ€Ρ‹).

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Π€ΠΎΡ€ΠΌΡƒΠ»Π° гавСрсинусов

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с нСбольшими расстояниями.

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ для Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄ΠΎΠ²

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ-Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π΅Π΅ модификация.

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] РСализация Π½Π° Avenue

На языкС Avenue, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ послСднюю Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ для вычислСния расстояния большого ΠΊΡ€ΡƒΠ³Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π’ΠΎΡ‡ΠΊΠΈ для вычислСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌ скриптом, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ pnt = point.make(long, lat) (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ скрипт):

'pnt1, pnt2 - Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ расстояния
'pi - число pi, rad - радиус сфСры (Π—Π΅ΠΌΠ»ΠΈ), num - количСство Π·Π½Π°ΠΊΠΎΠ² послС запятой
pi = 3.14159265358979
rad = 6372795
num = 7

'ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρ‚ΠΎΡ‡Π΅ΠΊ Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…
lat1 = pnt1.getY*pi/180
lat2 = pnt2.getY*pi/180
long1 = pnt1.getX*pi/180
long2 = pnt2.getX*pi/180

'косинусы ΠΈ синусы ΡˆΠΈΡ€ΠΎΡ‚ ΠΈ Ρ€Π°Π·Π½ΠΈΡ† Π΄ΠΎΠ»Π³ΠΎΡ‚
cl1 = lat1.cos
cl2 = lat2.cos
sl1 = lat1.sin
sl2 = lat2.sin
delta = long2 - long1
cdelta = delta.cos
sdelta = delta.sin

'вычислСния Π΄Π»ΠΈΠ½Ρ‹ большого ΠΊΡ€ΡƒΠ³Π°
p1 = (cl2*sdelta)^2
p2 = ((cl1*sl2) - (sl1*cl2*cdelta))^2
p3 = (p1 + p2)^0.5
p4 = sl1*sl2
p5 = cl1*cl2*cdelta
p6 = p4 + p5
p7 = p3/p6
anglerad = (p7.atan).SetFormatPrecision (num)
dist = anglerad*rad
'
вычислСниС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π°
x = (cl1*sl2) - (sl1*cl2*cdelta)
y = sdelta*cl2
z = (-y/x).ATan.AsDegrees
if (x < 0) then z = z+180 end
z = -(z + 180 mod 360 - 180).AsRadians
anglerad2 = z - ((2*pi)*((z/(2*pi)).floor)) angledeg = (anglerad2*180)/pi

'Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π»ΠΈΠ½Ρ‹ большого ΠΊΡ€ΡƒΠ³Π° ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π°
distlist = {dist, angledeg}
return distlist

Для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ расчСта Π΄Π»ΠΈΠ½ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ скриптом, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ расчСт Π΄Π»ΠΈΠ½ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ testpont Π΄ΠΎ всСх Ρ‚ΠΎΡ‡Π΅ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ Π²ΠΈΠ΄Π° ΠΈ запись Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² ΠΏΠΎΠ»Π΅ Newdist Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ этой Ρ‚Π΅ΠΌΡ‹:

atheme = av.getactivedoc.getactivethemes.get(0)
aftab = atheme.getftab
f_shape = aftab.findfield("Shape")

f_dist = aftab.findfield("dist")
f_ang = aftab.findfield("ang") 'testpoint - Ρ‚ΠΎΡ‡ΠΊΠ° отсчСта testpoint = point.make(25.85, 55.15) aftab.seteditable(true) 'для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚Π΅ΠΌΡ‹ Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ расстояния ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ отсчСта for each rec in aftab pnts = {} apoint = aftab.returnvalue(f_shape, rec) pnts.add(apoint.getx) pnts.add(testpoint.getx) pnts.add(apoint.gety) pnts.add(testpoint.gety) 'Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ расчСта расстояний '"Calc-distance" - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ скрипта с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ param = av.run("Calc-distance", pnts) aftab.setvalue(f_dist, rec, param.get(0)) aftab.setvalue(f_ang, rec, param.get(1)) end aftab.seteditable(false)

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] РСализация Π½Π° языкС Python

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ расчСта Ρ‡Π΅Ρ€Π΅Π· atan2(), Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π΅Π΅, Ρ‡Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для Avenue. (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ скрипт)

import math
 
 #pi - число pi, rad - радиус сфСры (Π—Π΅ΠΌΠ»ΠΈ)
 rad = 6372795
 
 #ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄Π²ΡƒΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ
 llat1 = 77.1539
 llong1 = -120.398
 
 llat2 = 77.1804
 llong2 = 129.55
 
 #Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…
 lat1 = llat1*math.pi/180.
 lat2 = llat2*math.pi/180.
 long1 = llong1*math.pi/180.
 long2 = llong2*math.pi/180.
 
 #косинусы ΠΈ синусы ΡˆΠΈΡ€ΠΎΡ‚ ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π΄ΠΎΠ»Π³ΠΎΡ‚
 cl1 = math.cos(lat1)
 cl2 = math.cos(lat2)
 sl1 = math.sin(lat1)
 sl2 = math.sin(lat2)
 delta = long2 - long1
 cdelta = math.cos(delta)
 sdelta = math.sin(delta)
 
 #вычислСния Π΄Π»ΠΈΠ½Ρ‹ большого ΠΊΡ€ΡƒΠ³Π°
 y = math.sqrt(math.pow(cl2*sdelta,2)+math.pow(cl1*sl2-sl1*cl2*cdelta,2))
 x = sl1*sl2+cl1*cl2*cdelta
 ad = math.atan2(y,x)
 dist = ad*rad
 
 #вычислСниС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π°
 x = (cl1*sl2) - (sl1*cl2*cdelta)
 y = sdelta*cl2
 z = math.degrees(math.atan(-y/x))
 
 if (x < 0):
     z = z+180.
 
 z2 = (z+180.) % 360. - 180.
 z2 = - math.radians(z2)
 anglerad2 = z2 - ((2*math.pi)*math.floor((z2/(2*math.pi))) )
 angledeg = (anglerad2*180.)/math.pi
 
 print 'Distance >> %.0f' % dist, ' [meters]'
 print 'Initial bearing >> ', angledeg, '[degrees]'

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] РСализация Π² Excel

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ расчСта расстояния большого ΠΊΡ€ΡƒΠ³Π° ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π° Π² Excel. ДСмонстрируСт расчСты Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΊΠΎΠ½ косинусов, гавСрсинус, ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· atan2().

МоТно Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

Public Function Distance_A_B(Lat1 As Double, Long1 As Double, Lat2 As Double, Long2 As Double)
    'ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ расстояний ΠΌΠ΅ΠΆΠ΄Ρƒ гСографичСскими ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ дСсятичными
    'расстояниС выводится Π² ΠΌΠ΅Ρ‚Ρ€Π°Ρ…

    With Application.WorksheetFunction

        Distance_A_B = .Atan2(Sin(.Pi() * Lat1 / 180) * Sin(.Pi() * Lat2 / 180) + Cos(.Pi() * Lat1 / 180) * Cos(.Pi() * Lat2 / 180) * Cos(Abs(.Pi() * Long2 / 180 - .Pi() * Long1 / 180)), _
                ((Cos(.Pi() * Lat2 / 180) * Sin(.Pi() * Long2 / 180 - .Pi() * Long1 / 180)) ^ 2 + (Cos(.Pi() * Lat1 / 180) * Sin(.Pi() * Lat2 / 180) - Sin(.Pi() * Lat1 / 180) * Cos(.Pi() * Lat2 / 180) * Cos(Abs(.Pi() * Long2 / 180 - .Pi() * Long1 / 180))) ^ 2) ^ 0.5) * 6372795

    End With

End Function

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…

Если всС считаСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΡˆΠΈΡ€ΠΎΡ‚Π°/Π΄ΠΎΠ»Π³ΠΎΡ‚Π°, расстояниС Π² ΠΌΠ΅Ρ‚Ρ€Π°Ρ…, Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» Π² дСсятичных градусах):

# Π’ΠΎΡ‡ΠΊΠ° 1 Π’ΠΎΡ‡ΠΊΠ° 2 РасстояниС Π£Π³ΠΎΠ»
1 77.1539/-139.398 -77.1804/-139.55 17166029 180.077867811
2 77.1539/120.398 77.1804/129.55 225883 84.7925159033
3 77.1539/-120.398 77.1804/129.55 2332669 324.384112704

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ВычислСниС расстояния ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π½Π° сфСрС β€” GIS-Lab

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ расстояния ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π”Π»ΠΈΠ½Π° Π΄ΡƒΠ³ΠΈ большого ΠΊΡ€ΡƒΠ³Π° – ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ находящимися Π½Π° повСрхности сфСры, ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ вдоль Π»ΠΈΠ½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅ΠΉ эти Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ (такая линия носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ€Ρ‚ΠΎΠ΄Ρ€ΠΎΠΌΠΈΠΈ) ΠΈ проходящСй ΠΏΠΎ повСрхности сфСры ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ повСрхности вращСния. БфСричСская гСомСтрия отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π­Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎΠΉ ΠΈ уравнСния расстояния Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π’ Π­Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎΠΉ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ, ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ – прямая линия. На сфСрС, прямых Π»ΠΈΠ½ΠΈΠΉ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚. Π­Ρ‚ΠΈ Π»ΠΈΠ½ΠΈΠΈ Π½Π° сфСрС ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΡ€ΡƒΠ³ΠΎΠ² – окруТностСй, Ρ†Π΅Π½Ρ‚Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ сфСры.

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π·ΠΈΠΌΡƒΡ‚ β€” Π°Π·ΠΈΠΌΡƒΡ‚, взяв ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ двиТСния ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ А, слСдуя ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ ΠΊΡ€ΡƒΠ³Ρƒ Π½Π° ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ B, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠ° B. ΠŸΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ A Π² Ρ‚ΠΎΡ‡ΠΊΡƒ B ΠΏΠΎ Π»ΠΈΠ½ΠΈΠΈ большого ΠΊΡ€ΡƒΠ³Π° Π°Π·ΠΈΠΌΡƒΡ‚ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ B постоянно мСняСтся. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π·ΠΈΠΌΡƒΡ‚ [angles-rhumb.html ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ постоянного], слСдуя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ, Π°Π·ΠΈΠΌΡƒΡ‚ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π½Π΅ мСняСтся, Π½ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ слСдования Π½Π΅ являСтся ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΌ расстояниСм ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ.

большой ΠΊΡ€ΡƒΠ³

Π§Π΅Ρ€Π΅Π· Π»ΡŽΠ±Ρ‹Π΅ Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° повСрхности сфСры, Ссли ΠΎΠ½ΠΈ Π½Π΅ прямо ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄Π°ΠΌΠΈ), ΠΌΠΎΠΆΠ½ΠΎ провСсти ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ большой ΠΊΡ€ΡƒΠ³. Π”Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ большой ΠΊΡ€ΡƒΠ³ Π½Π° Π΄Π²Π΅ Π΄ΡƒΠ³ΠΈ. Π”Π»ΠΈΠ½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ Π΄ΡƒΠ³ΠΈ – ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. ΠœΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ-Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ провСсти бСсконСчноС количСство Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΡ€ΡƒΠ³ΠΎΠ², Π½ΠΎ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° любом ΠΊΡ€ΡƒΠ³Π΅ ΠΈ Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ окруТности ΠΊΡ€ΡƒΠ³Π°, ΠΈΠ»ΠΈ pi*R, Π³Π΄Π΅ R – радиус сфСры.

расстояниС большого ΠΊΡ€ΡƒΠ³Π°

На плоскости (Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚), большиС ΠΊΡ€ΡƒΠ³ΠΈ ΠΈ ΠΈΡ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ упомянуто Π²Ρ‹ΡˆΠ΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π΄ΡƒΠ³ΠΈ Π²ΠΎ всСх проСкциях, ΠΊΡ€ΠΎΠΌΠ΅ гномоничСской, Π³Π΄Π΅ большиС ΠΊΡ€ΡƒΠ³ΠΈ β€” прямыС Π»ΠΈΠ½ΠΈΠΈ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ самолСты ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ авиатранспорт всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ минимального расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ для экономии Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Ρ‚ осущСствляСтся ΠΏΠΎ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ большого ΠΊΡ€ΡƒΠ³Π°, Π½Π° плоскости это выглядит ΠΊΠ°ΠΊ Π΄ΡƒΠ³Π°.

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Нью-Π™ΠΎΡ€ΠΊ β€” ПСкин

Π€ΠΎΡ€ΠΌΠ° Π—Π΅ΠΌΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описана ΠΊΠ°ΠΊ сфСра, поэтому уравнСния для вычислСния расстояний Π½Π° большом ΠΊΡ€ΡƒΠ³Π΅ Π²Π°ΠΆΠ½Ρ‹ для вычислСния ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π½Π° повСрхности Π—Π΅ΠΌΠ»ΠΈ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ.

ВычислСниС расстояния этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ эффСктивно ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, Ρ‡Π΅ΠΌ вычислСниС Π΅Π³ΠΎ для спроСктированных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… систСмах ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, для этого Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ гСографичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ прСобразования) ΠΈ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ, Ссли Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹, ΠΌΠΎΠ³Ρƒ привСсти ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ искаТСниям Π΄Π»ΠΈΠ½ Π² силу особСнностСй ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… искаТСний.

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ описываСт Ρ„ΠΎΡ€ΠΌΡƒ Π—Π΅ΠΌΠ»ΠΈ Π½Π΅ сфСра, Π° эллипсоид, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассматриваСтся вычислСниС расстояний ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° сфСрС, для вычислСний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сфСра радиусом 6372795 ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС вычислСния расстояний порядка 0.5%.

Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹

БущСствуСт Ρ‚Ρ€ΠΈ способа расчСта сфСричСского расстояния большого ΠΊΡ€ΡƒΠ³Π° (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅).

БфСричСская Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° косинусов

Π’ случаС ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… расстояний ΠΈ нСбольшой разрядности вычислСния (количСство Π·Π½Π°ΠΊΠΎΠ² послС запятой), использованиС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ошибкам связанным с ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ. ГрафичСскоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ» здСсь ΠΈ Π΄Π°Π»Π΅Π΅ β€” ΠΈΠ· Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ.

Great-cirlcles-05.gifβ€” ΡˆΠΈΡ€ΠΎΡ‚Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π° Π΄Π²ΡƒΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…

Great-cirlcles-06.gif

β€” Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎ Π΄ΠΎΠ»Π³ΠΎΡ‚Π΅

Great-cirlcles-07.gifβ€” угловая Ρ€Π°Π·Π½ΠΈΡ†Π°

сфСричСская Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° косинусов

Для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡƒΠ³Π»ΠΎΠ²ΠΎΠ³ΠΎ расстояния Π² мСтричСскоС, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ³Π»ΠΎΠ²ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° радиус Π—Π΅ΠΌΠ»ΠΈ (6372795 ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²), Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ расстояния Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π²Π½Ρ‹ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ радиус (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” ΠΌΠ΅Ρ‚Ρ€Ρ‹).

Π€ΠΎΡ€ΠΌΡƒΠ»Π° гавСрсинусов

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с нСбольшими расстояниями.

Great-cirlcles-08.gif

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ для Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄ΠΎΠ²

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ-Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π΅Π΅ модификация.

Great-cirlcles-09.gif

РСализация Π½Π° Avenue

На языкС Avenue, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ послСднюю Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ для вычислСния расстояния большого ΠΊΡ€ΡƒΠ³Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π’ΠΎΡ‡ΠΊΠΈ для вычислСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌ скриптом, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ pnt = point.make(long, lat) (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ скрипт):

'pnt1, pnt2 - Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ расстояния
'pi - число pi, rad - радиус сфСры (Π—Π΅ΠΌΠ»ΠΈ), num - количСство Π·Π½Π°ΠΊΠΎΠ² послС запятой
pi = 3.14159265358979
rad = 6372795
num = 7

'ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρ‚ΠΎΡ‡Π΅ΠΊ Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…
lat1 = pnt1.getY*pi/180
lat2 = pnt2.getY*pi/180
long1 = pnt1.getX*pi/180
long2 = pnt2.getX*pi/180

'косинусы ΠΈ синусы ΡˆΠΈΡ€ΠΎΡ‚ ΠΈ Ρ€Π°Π·Π½ΠΈΡ† Π΄ΠΎΠ»Π³ΠΎΡ‚
cl1 = lat1.cos
cl2 = lat2.cos
sl1 = lat1.sin
sl2 = lat2.sin
delta = long2 - long1
cdelta = delta.cos
sdelta = delta.sin

'вычислСния Π΄Π»ΠΈΠ½Ρ‹ большого ΠΊΡ€ΡƒΠ³Π°
p1 = (cl2*sdelta)^2
p2 = ((cl1*sl2) - (sl1*cl2*cdelta))^2
p3 = (p1 + p2)^0.5
p4 = sl1*sl2
p5 = cl1*cl2*cdelta
p6 = p4 + p5
p7 = p3/p6
anglerad = (p7.atan).SetFormatPrecision (num)
dist = anglerad*rad
'
вычислСниС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π°
x = (cl1*sl2) - (sl1*cl2*cdelta)
y = sdelta*cl2
z = (-y/x).ATan.AsDegrees
if (x < 0) then z = z+180 end
z = -(z + 180 mod 360 - 180).AsRadians
anglerad2 = z - ((2*pi)*((z/(2*pi)).floor)) angledeg = (anglerad2*180)/pi

'Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π»ΠΈΠ½Ρ‹ большого ΠΊΡ€ΡƒΠ³Π° ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π°
distlist = {dist, angledeg}
return distlist

Для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ расчСта Π΄Π»ΠΈΠ½ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ скриптом, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ расчСт Π΄Π»ΠΈΠ½ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ testpont Π΄ΠΎ всСх Ρ‚ΠΎΡ‡Π΅ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ Π²ΠΈΠ΄Π° ΠΈ запись Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² ΠΏΠΎΠ»Π΅ Newdist Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ этой Ρ‚Π΅ΠΌΡ‹:

atheme = av.getactivedoc.getactivethemes.get(0)
aftab = atheme.getftab
f_shape = aftab.findfield("Shape")

f_dist = aftab.findfield("dist")
f_ang = aftab.findfield("ang") 'testpoint - Ρ‚ΠΎΡ‡ΠΊΠ° отсчСта testpoint = point.make(25.85, 55.15) aftab.seteditable(true) 'для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚Π΅ΠΌΡ‹ Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ расстояния ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ отсчСта for each rec in aftab pnts = {} apoint = aftab.returnvalue(f_shape, rec) pnts.add(apoint.getx) pnts.add(testpoint.getx) pnts.add(apoint.gety) pnts.add(testpoint.gety) 'Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ расчСта расстояний '"Calc-distance" - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ скрипта с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ param = av.run("Calc-distance", pnts) aftab.setvalue(f_dist, rec, param.get(0)) aftab.setvalue(f_ang, rec, param.get(1)) end aftab.seteditable(false)

РСализация Π½Π° языкС Python

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ расчСта Ρ‡Π΅Ρ€Π΅Π· atan2(), Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π΅Π΅, Ρ‡Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для Avenue. (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ скрипт)

import math
 
 #pi - число pi, rad - радиус сфСры (Π—Π΅ΠΌΠ»ΠΈ)
 rad = 6372795
 
 #ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄Π²ΡƒΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ
 llat1 = 77.1539
 llong1 = -120.398
 
 llat2 = 77.1804
 llong2 = 129.55
 
 #Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…
 lat1 = llat1*math.pi/180.
 lat2 = llat2*math.pi/180.
 long1 = llong1*math.pi/180.
 long2 = llong2*math.pi/180.
 
 #косинусы ΠΈ синусы ΡˆΠΈΡ€ΠΎΡ‚ ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π΄ΠΎΠ»Π³ΠΎΡ‚
 cl1 = math.cos(lat1)
 cl2 = math.cos(lat2)
 sl1 = math.sin(lat1)
 sl2 = math.sin(lat2)
 delta = long2 - long1
 cdelta = math.cos(delta)
 sdelta = math.sin(delta)
 
 #вычислСния Π΄Π»ΠΈΠ½Ρ‹ большого ΠΊΡ€ΡƒΠ³Π°
 y = math.sqrt(math.pow(cl2*sdelta,2)+math.pow(cl1*sl2-sl1*cl2*cdelta,2))
 x = sl1*sl2+cl1*cl2*cdelta
 ad = math.atan2(y,x)
 dist = ad*rad
 
 #вычислСниС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π°
 x = (cl1*sl2) - (sl1*cl2*cdelta)
 y = sdelta*cl2
 z = math.degrees(math.atan(-y/x))
 
 if (x < 0):
     z = z+180.
 
 z2 = (z+180.) % 360. - 180.
 z2 = - math.radians(z2)
 anglerad2 = z2 - ((2*math.pi)*math.floor((z2/(2*math.pi))) )
 angledeg = (anglerad2*180.)/math.pi
 
 print 'Distance >> %.0f' % dist, ' [meters]'
 print 'Initial bearing >> ', angledeg, '[degrees]'

РСализация Π² Excel

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ расчСта расстояния большого ΠΊΡ€ΡƒΠ³Π° ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π·ΠΈΠΌΡƒΡ‚Π° Π² Excel. ДСмонстрируСт расчСты Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΊΠΎΠ½ косинусов, гавСрсинус, ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· atan2().

МоТно Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

Public Function Distance_A_B(Lat1 As Double, Long1 As Double, Lat2 As Double, Long2 As Double)
    'ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ расстояний ΠΌΠ΅ΠΆΠ΄Ρƒ гСографичСскими ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ дСсятичными
    'расстояниС выводится Π² ΠΌΠ΅Ρ‚Ρ€Π°Ρ…

    With Application.WorksheetFunction

        Distance_A_B = .Atan2(Sin(.Pi() * Lat1 / 180) * Sin(.Pi() * Lat2 / 180) + Cos(.Pi() * Lat1 / 180) * Cos(.Pi() * Lat2 / 180) * Cos(Abs(.Pi() * Long2 / 180 - .Pi() * Long1 / 180)), _
                ((Cos(.Pi() * Lat2 / 180) * Sin(.Pi() * Long2 / 180 - .Pi() * Long1 / 180)) ^ 2 + (Cos(.Pi() * Lat1 / 180) * Sin(.Pi() * Lat2 / 180) - Sin(.Pi() * Lat1 / 180) * Cos(.Pi() * Lat2 / 180) * Cos(Abs(.Pi() * Long2 / 180 - .Pi() * Long1 / 180))) ^ 2) ^ 0.5) * 6372795

    End With

End Function

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…

Если всС считаСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΡˆΠΈΡ€ΠΎΡ‚Π°/Π΄ΠΎΠ»Π³ΠΎΡ‚Π°, расстояниС Π² ΠΌΠ΅Ρ‚Ρ€Π°Ρ…, Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» Π² дСсятичных градусах):

# Π’ΠΎΡ‡ΠΊΠ° 1 Π’ΠΎΡ‡ΠΊΠ° 2 РасстояниС Π£Π³ΠΎΠ»
1 77.1539/-139.398 -77.1804/-139.55 17166029 180.077867811
2 77.1539/120.398 77.1804/129.55 225883 84.7925159033
3 77.1539/-120.398 77.1804/129.55 2332669 324.384112704

Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ΠŸΡƒΡ‚Π΅Π²ΠΎΠΉ ΡƒΠ³ΠΎΠ» ΠΈ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎ локсодромС (Π»ΠΈΠ½ΠΈΠΈ Ρ€ΡƒΠΌΠ±Π°).

Π’ 16 Π²Π΅ΠΊΠ΅ фламандский Π³Π΅ΠΎΠ³Ρ€Π°Ρ„ Π“Π΅Ρ€Ρ…Π°Ρ€Π΄ ΠœΠ΅Ρ€ΠΊΠ°Ρ‚ΠΎΡ€ составил Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΌΠΈΡ€Π°, ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΠ² ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π—Π΅ΠΌΠ»ΠΈ Π½Π° плоскости Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ³Π»Ρ‹ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ Π½Π΅ искаТались. Π’ настоящСС врСмя Ρ‚Π°ΠΊΠΎΠΉ способ изобраТСния Π—Π΅ΠΌΠ»ΠΈ извСстСн, ΠΊΠ°ΠΊ Ρ€Π°Π²Π½ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ цилиндричСская проСкция ΠœΠ΅Ρ€ΠΊΠ°Ρ‚ΠΎΡ€Π°. Вакая ΠΊΠ°Ρ€Ρ‚Π° Π±Ρ‹Π»Π° ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Π° для ΠΌΠΎΡ€Π΅ΠΏΠ»Π°Π²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ А Π² Ρ‚ΠΎΡ‡ΠΊΡƒ Π‘ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠœΠ΅Ρ€ΠΊΠ°Ρ‚ΠΎΡ€Π° достаточно провСсти ΠΏΡ€ΡΠΌΡƒΡŽ линию ΠΌΠ΅ΠΆΠ΄Ρƒ этими Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, Π·Π°ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ Π΅Π΅ ΡƒΠ³ΠΎΠ» ΠΊ ΠΌΠ΅Ρ€ΠΈΠ΄ΠΈΠ°Π½Ρƒ ΠΈ постоянно ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этого направлСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ сСкстант ΠΈ ΠΏΠΎΠ»ΡΡ€Π½ΡƒΡŽ Π·Π²Π΅Π·Π΄Ρƒ Π² качСствС ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΈΠ»ΠΈ ΠΌΠ°Π³Π½ΠΈΡ‚Π½Ρ‹ΠΉ компас. (На самом Π΄Π΅Π»Π΅ с компасом Π½Π΅ Ρ‚Π°ΠΊ всС просто, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ всСгда ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° истинный сСвСр, Π½ΠΎ ΠΎΠ± этом ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·). ΠŸΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡ ΠœΠ΅Ρ€ΠΊΠ°Ρ‚ΠΎΡ€Π° Π΄ΠΎ сих ΠΏΠΎΡ€ ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся для составлСния Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚.
Однако, Π΅Ρ‰Π΅ Π΄Ρ€Π΅Π²Π½ΠΈΠ΅ ΠΌΠΎΡ€Π΅ΠΏΠ»Π°Π²Π°Ρ‚Π΅Π»ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ линия Ρ€ΡƒΠΌΠ±Π° Π½Π΅ всСгда являСтся ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, особСнно, это ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ для Π΄Π°Π»ΡŒΠ½ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². Если провСсти Π½Π° глобусС линию, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΡƒΡŽ всС ΠΌΠ΅Ρ€ΠΈΠ΄ΠΈΠ°Π½Ρ‹ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΡƒΠ³Π»ΠΎΠΌ, Ρ‚ΠΎ станСт понятно, ΠΎΡ‚Ρ‡Π΅Π³ΠΎ это происходит. ΠŸΡ€ΡΠΌΠ°Ρ линия Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠœΠ΅Ρ€ΠΊΠ°Ρ‚ΠΎΡ€Π° прСвращаСтся Π½Π° глобусС Π² бСсконСчно Π·Π°ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ ΠΊ полюсам ΡΠΏΠΈΡ€Π°Π»ΡŒ. Π’Π°ΠΊΡƒΡŽ линию Π² соврСмСнной Π½Π°ΡƒΠΊΠ΅ принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ грСчСским словом локсодромия, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «косой Π±Π΅Π³Β».
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π»Π΅Π΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ вычисляСт ΠΏΡƒΡ‚Π΅Π²ΠΎΠΉ ΡƒΠ³ΠΎΠ» ΠΈ расстояниС трансатлантичСского ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈΠ· Лас Пальмаса (Испания) Π² Π‘Ρ€ΠΈΠ΄ΠΆΡ‚Π°ΡƒΠ½ (Барбадос) ΠΏΠΎ локсодромии. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ расстояниС Π½Π° дСсятки ΠΊΠΈΠ»ΠΎΠΌΠ΅Ρ‚Ρ€ΠΎΠ² отличаСтся ΠΎΡ‚ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ (см.РасстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ).

PLANETCALC, ВычислСниС постоянного Π°Π·ΠΈΠΌΡƒΡ‚Π° ΠΈ Π΄Π»ΠΈΠ½Ρ‹ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΡƒΠΌΠ±Π°
ВычислСниС постоянного Π°Π·ΠΈΠΌΡƒΡ‚Π° ΠΈ Π΄Π»ΠΈΠ½Ρ‹ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΡƒΠΌΠ±Π°
ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ°, ΡˆΠΈΡ€ΠΎΡ‚Π°ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ°, Π΄ΠΎΠ»Π³ΠΎΡ‚Π°ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ°, ΡˆΠΈΡ€ΠΎΡ‚Π°ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ°, Π΄ΠΎΠ»Π³ΠΎΡ‚Π°Π Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†-эллипсоид Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ вычислСния

Π—Π½Π°ΠΊΠΎΠ² послС запятой: 2

РасстояниС Π² ΠΊΠΈΠ»ΠΎΠΌΠ΅Ρ‚Ρ€Π°Ρ…

 

РасстояниС Π² морских милях

 

save Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ share ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ extension Π’ΠΈΠ΄ΠΆΠ΅Ρ‚

Для вычислСния ΠΏΡƒΡ‚Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹:


Π³Π΄Π΅

Π”Π»ΠΈΠ½Π° локсодромии вычислСна ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

, Π³Π΄Π΅ β€” ΡˆΠΈΡ€ΠΎΡ‚Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ β€” ΡˆΠΈΡ€ΠΎΡ‚Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ
β€” эксцСнтиситСт сфСроида (a β€” Π΄Π»ΠΈΠ½Π° большой полуоси, b β€” Π΄Π»ΠΈΠ½Π° ΠΌΠ°Π»ΠΎΠΉ полуоси)

ΠŸΡ€ΠΈ ΡƒΠ³Π»Π°Ρ… 90Β° ΠΈΠ»ΠΈ 270Β° для вычислСния Π΄Π»ΠΈΠ½Ρ‹ Π΄ΡƒΠ³ΠΈ использовалась Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°:

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *