Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

Программирование в геодезии

Тема в разделе "Общие вопросы", создана пользователем Alexyz, 11 май 2009.

  1. BearDyugin

    BearDyugin Модератор
    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.748
    Симпатии:
    2.505
    Адрес:
    Сибирь
    Да, в чужой программе даже на понятном языке мозг сломаешь ::biggrin24.gif::

    Почитай Разработка и реализация алгоритмов трехмерной триангуляции сложных пространственных областей: итерационные методы
    Должны, но вы на местности представляете горизонтали? Какие они: угловатые или плавные?
     
    #21
  2. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    C точностью до наоборот. LISP - функциональный язык, используемый в декларативной парадигме программирования. Противоположностью декларативного программирования является императивное. К императивным языкам программирования относятся: Fortran, PL/I, Algol, Basic, Pascal, Cи с его клонами и т.д.
    В теме Алгоритм построения горизонталей я приводил ссылку на интересную страничку Триангуляция, работа с полигонами и другие алгоритмы, посмотрите там, вруг что-то приглянётся.
    И, само-собой разумеется, что программа построения должна быть интерактивной.
    Учится никогда не поздно, я вот сейчас на языке D начал писать программки. ::wink24.gif::
     
    #22
  3. Alexyz

    Форумчанин

    Регистрация:
    24 янв 2009
    Сообщения:
    250
    Симпатии:
    8
    Адрес:
    Россия
    Вы немного меня не поняли ::biggrin24.gif:: , просто линию можно сгладить а можно и сплайнить. В обоих вариантов углов не будет, но положение будит в двух случаях разное.
    за ссылку спасибо большое, я думаю, это то что надо ...
    (Добавление)
    спасибо stout, не заметил тему Алгоритм построения горизонталей на форуме. Не думал, что актуальна эта тема.
    Вот интересный патент нашел.
     
    #23
  4. BearDyugin

    BearDyugin Модератор
    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.748
    Симпатии:
    2.505
    Адрес:
    Сибирь
    Слова то какие ::biggrin24.gif::
    Парадигмы программирования (раскрыть)

    Парадигмы программирования
    Парадигма — набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания, — иными словами, способ видения мира. По аналогии с этим принято считать, что парадигма в программировании — способ концептуализации, который определяет, как следует проводить вычисления, и как работа, выполняемая компьютером, должна быть структурирована и организована.

    Известно несколько основных парадигм программирования, важнейшими из которых на данный момент времени являются парадигмы директивного, объектно-ориентированного и функционально-логического (декларативного) программирования. Для поддержки программирования в соответствии с той или иной парадигмой разработаны специальные алгоритмические языки.

    К директивным языкам относятся такие классические языки программирования, как Algol, Fortran, Basic, Pascal, C. Наиболее существенными классами декларативных языков являются функциональные (functional) или аппликативные, и логические (logic) языки. К категории функциональных языков относятся, например, Lisp и Haskell. Самым известным языком логического программирования является Prolog (Пролог). Среди объектно-ориентированных языков программирования (языков ООП) отметим C++, Java, Python и Ruby.

    Отложим пока обсуждение концепции ООП и поговорим о различии между первыми двумя парадигмами. Главное заключается в следующем: декларативная программа заявляет (декларирует), что должно быть достигнуто в качестве цели, а директивная предписывает, как ее достичь.

    Поясним это на следующем примере. Предположим, вам надо пройти в городе из пункта А в пункт Б. Декларативная программа - это план города, в котором указаны оба пункта, плюс правила уличного движения. Руководствуясь этими правилами и планом города, курьер сам найдет путь от пункта А к пункту Б.

    Директивная программа - это список команд примерно такого рода: от пункта А по ул. Садовой на север до площади Славы, оттуда по ул. Пушкина два квартала, потом повернуть направо и идти до Театрального переулка, по этому переулку налево по правой стороне до дома 20, который и есть пункт Б.

    В директивной программе действия задаются явными командами, подготовленными ее составителем. Исполнитель же просто им следует. Хотя команды в различных языках директивного программирования и выглядят по-разному, все они сводятся либо к присваиванию какой-нибудь переменной некоторого значения, либо к выбору следующей команды, которая должна будет выполняться. Присваиванию может предшествовать выполнение ряда арифметических и иных операций, вычисляющих требуемое значение, а команды выбора реализуются в виде условных операторов и операторов повторения (циклов).

    Для классических директивных языков характерно, что последовательность выполняемых команд совершенно однозначно определяется ее входными данными. Как говорят, поведение исполнителя императивной программы полностью детерминировано.

    Декларативные программы не предписывают выполнять определенную последовательность действий, в них лишь дается разрешение совершать их. Исполнитель должен сам найти способ достижения поставленной перед ним составителем программы (программистом) цели, причем зачастую это можно сделать различными способами - детерминированность в данном случае отсутствует.

    Нельзя сказать, что один язык лучше другого только потому, что в нем есть возможности, которые в другом отсутствуют. Здесь более важно не то, какими возможностями обладает язык, а то, насколько имеющиеся в нем возможности поддерживают избранный стиль программирования для решения определенного круга задач.

    Ну, да, чуть-чуть.
    Согласен, сплайнить нельзя, надо сглаживать, но опять же поверхность то ломанная, вот бы её рассчитать плавной.
     
    #24
  5. Alexyz

    Форумчанин

    Регистрация:
    24 янв 2009
    Сообщения:
    250
    Симпатии:
    8
    Адрес:
    Россия
    Visual Basic уже давно является Объектно-Ориентированным языком, если я правильно вас понял (stout).
     
    #25
  6. Александр Устинов

    Александр Устинов Только чтение
    Форумчанин

    Регистрация:
    16 авг 2008
    Сообщения:
    5.141
    Симпатии:
    632
    Адрес:
    Химки
  7. X-Y-H

    X-Y-H Администратор
    Команда форума Форумчанин

    Регистрация:
    18 май 2007
    Сообщения:
    21.789
    Симпатии:
    7.068
    Адрес:
    Россия
    Оффтоп
    Александр, а что там? Может кратко опишешь?
     
    #27
  8. Александр Устинов

    Александр Устинов Только чтение
    Форумчанин

    Регистрация:
    16 авг 2008
    Сообщения:
    5.141
    Симпатии:
    632
    Адрес:
    Химки
  9. злой инженер

    Форумчанин

    Регистрация:
    10 ноя 2008
    Сообщения:
    560
    Симпатии:
    77
    в делфях(Pascal) выглядит короче:
    function CalcPolygonSurf:extended;
    var i,n:integer;
    tmp:extended;
    s,x,yn,yp:extended;
    begin
    tmp:=0;
    n:=Length(Nodes)-1;
    for i:=0 to n do
    begin
    x:=Nodes.Node.X;
    if i<n then
    yn:=Nodes[i+1].Node.Y
    else
    yn:=Nodes[0].Node.Y;
    If i>0 then
    yp:=Nodes[i-1].Node.Y
    else
    yp:=Nodes[n].Node.Y;
    tmp:=tmp+(x*(yn-yp));
    end;
    s:=0.5*tmp;
    Result:=s;
    end;
    в C# еще симпатичнее наверное
     
    #29
  10. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    нет пределу совершенства ::rolleyes24.gif::
    Код:
    function CalcPolygonSurf: Double;
    var i, n: Integer;
      tmp: Double;
    begin
      n := Length(Nodes) - 1;
      tmp := Nodes[0].Node.X * (Nodes[1].Node.Y - Nodes[n].Node.Y) +
             Nodes[n].Node.X * (Nodes[0].Node.Y - Nodes[n - 1].Node.Y);
      Dec(n);
      for i := 1 to n do
        temp := temp + Nodes.Node.X * (Nodes[i + 1].Node.Y - Nodes[i - 1].Node.Y);
      Result := Abs(temp) / 2;
    end; // function CalcPolygonSurf
    

    Использование Extended под Виндами требует особой тщательности, т.е. если вы хотите на выходе действительно получить Extended, а не Double с мусором в конце. К огромному сожалению, есть огромное число программ и библиотек, которые изменяют слово состояния процессора, но не востанавливают его. На этом поприще особо отметился Саманный кирпич (ADOBE) и драйвера ATI. Да и сами винды были не без греха. Мне кажется именно в этом причина того, что в продуктах Microsoft до сих пор long double тождественен просто double.
    Правильная статья на эту тему Неочевидные особенности вещественных чисел. Вот только характеристику числа почему-то называет экспонентой.
     
    #30
  11. злой инженер

    Форумчанин

    Регистрация:
    10 ноя 2008
    Сообщения:
    560
    Симпатии:
    77
    В свое время вышел на эту же статью как раз из-за якобы абсурдных ситуаций; впрочем "абсурдность" относительно быстро выявляется отладчиком.
    если помнить о внутреннем формате вещ.чисел, о "необязательной точности" extended и не делать сравнений вроде этого:
    "
    var R:Single;
    begin
    R:=0.1;
    if R=0.1 then
    Label1.Caption:='Равно'"
    в общем-то не страшно.
    А использование extended обосновывается максимальной производительностью:
    "
    extended – это родной для сопроцессора тип, а типы Single и Double получаются из него очень простым усечением
    При загрузке числа типа Single или Double во внутренний регистр сопроцессора последний конвертирует их в Extended.
    Внутренние же операции всегда выполняются с данными типа Extended "

    не знаю, на сколько конкретно падает производительность за счет "конвертирует их в Extended" однако сталкивался с существенным падением производительности при преобразовании типов в большом объеме вычислений.
     
    #31
  12. globus1

    globus1 Только чтение

    Интересная у Вас тема. Читая её даже сообразить не могу: толи я дурак такой, толи вы такие умные. Себя по наивности считал слегка программистом.
    Хотя бы что-то из того, что вы описали выше - в каком программном продукте искать??
     
    #32
  13. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    Почти. Если речь идёт об арифметике в соответствии с IEЕE-754, то в single и double у мантиссы есть скрытый бит, у extended его нет. Отличаются также характеристиками.
    Вообще то, зависит от PSW. Выигрыша в скорости при снижении разрядности вычислений почти никакого. Extended проигрывает double из-за скорости загрузки из памяти в стек FPU. Наиболее быстро операция происходит для операндов, чей адрес выровнен на границу 8 байт. При загрузке элементов массива Extended добавляются штрафные такты для тех элементов, адрес которых не кратен 8.
    Извините не понял вопроса.
    З.Ы. Ага. Дурак. из тех дураков, что семерых умных за пояс заткнут и не моргнут.
     
    #33
  14. BBC

    BBC
    Форумчанин

    Регистрация:
    7 май 2007
    Сообщения:
    929
    Симпатии:
    17
    Адрес:
    Москва
    Правильно отобразить рельеф в принципе не возможно : 1- недостаточная плотность пикетов; 2- даже если вводить структурные линии, триангуляция будет с глюками; 3- точки интерполяции соединяются прямыми (ломанными), которые сглаживаются "на глазок".
    А задача решена ещё при царе Горохе. Топограф в поле максимально плотно (в разумных пределах) выбирал особенности рельефа и изображал его ломанными линиями. Затем специальный художник (или сам топограф) сглаживал их вручную по принципу "что бы было красиво". И по инструкции (по общему соглашению) рельеф горизонталями отображается с точностью 1\4 и 1\3 сечения. А алгоритм творчества ещё никто не создал.
     
    #34
  15. X-Y-H

    X-Y-H Администратор
    Команда форума Форумчанин

    Регистрация:
    18 май 2007
    Сообщения:
    21.789
    Симпатии:
    7.068
    Адрес:
    Россия
    Но приблизиться к этому можно ::rolleyes24.gif::
     
    #35
  16. злой инженер

    Форумчанин

    Регистрация:
    10 ноя 2008
    Сообщения:
    560
    Симпатии:
    77
    Похоже вы правы. в приведенном примере Double иногда даже быстрее. Хотя тригоном.функции на входе и выходе Extended. В среднем почти одинаково. (возможно пример и корявый, первое что пришло в голову)
    словами Stout:"нет пределу совершенства"
     

    Вложения:

    • Project1.tar.gz
      Размер файла:
      202,8 КБ
      Просмотров:
      68
    #36
  17. BearDyugin

    BearDyugin Модератор
    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.748
    Симпатии:
    2.505
    Адрес:
    Сибирь
    Если сам снимал, ходил с вешкой, то я всегда руками подправлял горизонтали, например на дне канавы вместо ) я их правил на >, даже будучи сглаженные, и красиво отображенные программно.
    Но сейчас бы я этого делать не стал, да и в будущем не стану, ведь горизонтали - так для красоты, общего понимания, а все работы проводятся по поверхности триангуляции.
    Поэтому "правильно отобразить рельеф" сильно то и не кому не надо, всё равно бульдозер с экскаватором пригонят и нафиг всё сровняют ::biggrin24.gif::
     
    #37
  18. sanya1980

    Регистрация:
    25 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Адрес:
    Мурманск
    ребят я с вами.
    Кому нужно может.
    Блоки с автоматическими отслеживаемыми координатами выводимыми в атрибуты с возможностью автоматической нумерации и составления текстового файла job с ними.

    Написано в VBA
     
    #38
  19. X-Y-H

    X-Y-H Администратор
    Команда форума Форумчанин

    Регистрация:
    18 май 2007
    Сообщения:
    21.789
    Симпатии:
    7.068
    Адрес:
    Россия
    #39
  20. Alexyz

    Форумчанин

    Регистрация:
    24 янв 2009
    Сообщения:
    250
    Симпатии:
    8
    Адрес:
    Россия
    Не знал куда вопрос задать, решил здесь написать т.к. вопрос специфический. Проблема вот в чем: ГОСТ 51794-2008 проблема в преобразовании геодезических координат из системы А в систему Б (п. 5.3). Интересует только метод из географической системы в географическую минуя перевода координат в пространственно прямоугольные.
    Ниже прикреплю код в C#, выходные значения переменных не соответствуют действительности. Испробовал много разных формул, но меньше метра по точности в плане не приблизился, про высоты вообще молчу. Для контроля использую LGO, данные датума соответствует входящим переменным метода. В чем может быть проблема?
    32d195371cc0.jpg
     
    #40

Поделиться этой страницей

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление