1. ВНИМАНИЕ! В течении пары дней +- будет переезд форума на более защищённый сервер. Возможны периодические перебои в работе.

Прямая геодезическая задача на эллипсоиде, первый алгоритм способа Бесселя

Discussion in 'Помощь студентам' started by lbvfy523, Nov 6, 2020.

  1. lbvfy523

    lbvfy523 Форумчанин

    вот.
     

    Attached Files:

  2. zvezdochiot

    zvezdochiot Форумчанин

    Завтра разберёмся.
     
  3. zvezdochiot

    zvezdochiot Форумчанин

    Полная каша:

    "Обр. задача. Бессель 1"

    Y4: =M4+N4*COS(T4)
    AP4: =IF(AND(AN4>=0;AO4>=0);180+ABS(ATAN(AN4/AO4));IF(AND(AN4<0;AO4<0);ABS(ATAN(AN4/AO4));IF(AND(AN4>=0;AO4<0);360-ABS(ATAN(AN4/AO4));180-ABS(ATAN(AN4/AO4)))))

    Ну ты либо только радианы (-ПИ()..ПИ()), либо всегда градусы (0..360) пользуй. Но не сборную солянку.

    AJ4: =b*(e')
    AK4: =b*(e')

    Чего то явно не хватает.
     
    chnav likes this.
  4. lbvfy523

    lbvfy523 Форумчанин

    Итак, подведём итоги на сегодняшний день:
    Вот "причёсаный" вариант решения. (файл прикладываю)
    Как заявлено в методичке, цитата:..."При вычислении по приведенным алгоритмам расхождения результатов пр]ямой и обратной задач не превышают 1 мм в координатах и длине геодезической линии и 0,001`` в азимутах."...
    Проанализировав полученные результаты, пришел к следующим выводам:
    Такой точности я не добился, так как, например, направление азимута из А на В, по логике должно быть 90°, на деле я получил 89,9966134210212 градусов, что соответствует 89°59`47``808. Расхождение (с моей логикой) составляет почти 13``, - многовато. Вывод: в решении есть существенные ошибки.
    Что намереваюсь сделать:
    В исходных данных у нас есть 4 точки координаты которых заданы в угловых мерах. Для последующих вычислений перевести заданные угловые меры в радианы и уже с ними спокойно проводить вычисления. Полученные результаты (азимуты) перевести в угловые меры при заполнении таблицы. Это должно уменьшить вероятность ошибок при наборе формул.

    И всё таки, если можно, объясните мне какое значение сигма применять в дальнейших расчётах (я так и не разобрался):
    Какое значение использовать.PNG
     

    Attached Files:

  5. zvezdochiot

    zvezdochiot Форумчанин

    Уже сказали же:

    sigma=ATAN2('cos(sigma)';`sin(sigma)`)
    => (-ПИ()..ПИ())
     
  6. lbvfy523

    lbvfy523 Форумчанин

    Всё, разобрался как "оно" работает.
    Маткад я лучше понимаю чем Ёксель, поэтому добился ОТЛИЧНОГО результата в маткаде. (фай с решением в маткаде приложил)
    Теперь и в Ёкселе не трудно будет всё сделать правильно.
     

    Attached Files:

  7. zvezdochiot

    zvezdochiot Форумчанин

    Только непонятно, почему в MathCAD ты делаешь вычисления вниз, а в Excel почему то вбок? "Удобства" причиняешь себе на пустом месте.

    PS: Совет: Не используй имя (e'), будь проще, например (ee).
     
  8. lbvfy523

    lbvfy523 Форумчанин

    А я и сам не знаю почему. Так привык наверное.
    --- Сообщения объединены, Nov 11, 2020, Оригинальное время сообщения: Nov 11, 2020 ---
    Я в своём блокноте могу вообще арабским шрифтом кодироваться. Вот только те люди кто будут по методичке сверять результат, как будут понимать, что е` закодирована в ее?
    Я уже писал, что стараюсь не отклоняться от методички иначе следующим будет очень трудно разобраться, что и откуда взялось.
    В файле Эксель все ячейки с формулами скрою и закодирую. этот файл будет предназначен для того, чтоб студент (или любой другой человек) мог сверить свое решение с моим "правильным" и не мог сказать, что в Экселе решить эту задачу невозможно.
    Хочу сказать, что Решение этой задачи методом Бесселя, даёт ОТЛИЧНЫЙ результат, при этом желательная точность результатов может задаваться в очень широких пределах.
     
  9. zvezdochiot

    zvezdochiot Форумчанин

    В этом и "прикол", что "имена" (метки диапазонов, уже как звучит) в Excel (особенно такие, ты бы ещё запятую использовал) иногда (не всегда) сбоят. Проявляется это на разных версиях офиса по разному. Но решай сам.

    PS: Менее плохо пользовать абсолютный адрес ячейки, например $D$4.

    PS2: Вместо растровых формул, менее плохо воспользоваться каким-либо онлайн сервисом на базе TeX, для генерации формул в формате SVG.
     
  10. lbvfy523

    lbvfy523 Форумчанин

    А вот об этом можно подробнее? Что это, и с чем это "едят"? Я вообще не в курсе.
     
  11. zvezdochiot

    zvezdochiot Форумчанин

  12. zvezdochiot

    zvezdochiot Форумчанин

    Ежели нужен визуальный редактор формул, то вот: http://primat.org/mathred/mathred.html . Поможет набрать сами формулы, но генерить SVG по ссылке выше.

    SVG спокойно вставляется в любой офисный документ и при этом остаётся именно векторным. Более того, в случае необходимости, ты всегда можешь "подправлять" SVG в блокноте.
     
  13. chnav

    chnav Форумчанин

    Формула для нормализации любого угла в диапазон 0-360° (0-2*Pi), никаких IF и двойных вычислений:
    В градусах
    Code:
    =MOD(DEGREES(ATAN2(A1,B1)),360)
    В радианах
    Code:
    =MOD(ATAN2(A1,B1),2*PI())
     
    zvezdochiot and Самстон like this.
  14. zvezdochiot

    zvezdochiot Форумчанин

    Слегка погорячился. Не каждый SVG будет хорошо отображаться. Результат первого генератора (https://geodesist.ru/threads/prjama...itm-sposoba-besselja.85912/page-4#post-977648) меня не впечатлил совсем (после вставки в документ). Гораздо краше получилось с https://www.geogebra.org/m/j8bx2s9x .
    --- Сообщения объединены, Nov 12, 2020, Оригинальное время сообщения: Nov 12, 2020 ---
    И всё таки в радианах принято от -ПИ до ПИ. И на то есть вполне логичные математические основания (зеркальность).
     
  15. chnav

    chnav Форумчанин

    Небольшой оффтоп.
    Недавно мне понадобилось считать угол возвышения и азимут на геостационарные спутники. Задача намного проще, чем ПГЗ на эллипсоиде, но даже в этом случае стал путаться в разных колонках, решение получается одноразовым для конкретного файла. В результате сделал пользовательские функции на VBA, что оказалось намного проще и в написании, и в отладке.

    Но есть и минусы - в VBA очень ограниченный список математических функций, даже atan2 пришлось делать из atan.

    Код ATN2 для VBA (open)

    Code:
    Function atn2(x As Double, y As Double)
    Rem https://en.wikipedia.org/wiki/Atan2
     
    Pi = 3.14159265358979
     
    If x = 0 Then
        If y = 0 Then
            ret = y / 0#
        ElseIf y > 0 Then
            ret = Pi / 2
        Else
            ret = -Pi / 2
        End If
    ElseIf x > 0 Then
        ret = Atn(y / x)
    ElseIf y >= 0 Then
        ret = Atn(y / x) + Pi
    Else
        ret = Atn(y / x) - Pi
    End If
     
    atn2 = ret
    End Function
     
  16. zvezdochiot

    zvezdochiot Форумчанин

    Spoiler
    VBA - в принципе неплохой механизм, но история у него грязная. И забывать об этом не стоит. Все наименования ("макрос", "пользовательская функция",...) VBA позаимствовал из совершено другого механизма - Листов Макросов. При этом VBA преподнесли как некое достижение, в то время как "Листы Макросов", полностью соответствующие структуре Excel и абсолютно гармонирующие с ним, вырезали. Но даже ёжику понятно, что вот в таких вещах "пользовательские функции", написанные на "Листах Макросов" были бы гораздо удобнее и лаконичней.
     
  17. stout

    stout Форумчанин

    Application.Atan2
     
    chnav likes this.
  18. lbvfy523

    lbvfy523 Форумчанин

    Сделал расчёт по второму алгоритму Бесселя (сам файл ещё не "причёсывал). Прошу просто проверить, правильно ли расчитываются азимуты и расстояния (просто скажите правильно или нет). Если не правильно - буду искать ошибки.
     
  19. stout

    stout Форумчанин

  20. stout

    stout Форумчанин

    Attached Files:

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice