Да, в чужой программе даже на понятном языке мозг сломаешь Почитай Разработка и реализация алгоритмов трехмерной триангуляции сложных пространственных областей: итерационные методы Должны, но вы на местности представляете горизонтали? Какие они: угловатые или плавные?
C точностью до наоборот. LISP - функциональный язык, используемый в декларативной парадигме программирования. Противоположностью декларативного программирования является императивное. К императивным языкам программирования относятся: Fortran, PL/I, Algol, Basic, Pascal, Cи с его клонами и т.д. В теме Алгоритм построения горизонталей я приводил ссылку на интересную страничку Триангуляция, работа с полигонами и другие алгоритмы, посмотрите там, вруг что-то приглянётся. И, само-собой разумеется, что программа построения должна быть интерактивной. Учится никогда не поздно, я вот сейчас на языке D начал писать программки.
Вы немного меня не поняли , просто линию можно сгладить а можно и сплайнить. В обоих вариантов углов не будет, но положение будит в двух случаях разное. за ссылку спасибо большое, я думаю, это то что надо ... (Добавление) спасибо stout, не заметил тему Алгоритм построения горизонталей на форуме. Не думал, что актуальна эта тема. Вот интересный патент нашел.
Слова то какие Парадигмы программирования (Наведите курсор, чтобы раскрыть содержимое) Парадигмы программирования (раскрыть) Парадигмы программирования (свернуть) Парадигмы программирования Парадигма — набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания, — иными словами, способ видения мира. По аналогии с этим принято считать, что парадигма в программировании — способ концептуализации, который определяет, как следует проводить вычисления, и как работа, выполняемая компьютером, должна быть структурирована и организована. Известно несколько основных парадигм программирования, важнейшими из которых на данный момент времени являются парадигмы директивного, объектно-ориентированного и функционально-логического (декларативного) программирования. Для поддержки программирования в соответствии с той или иной парадигмой разработаны специальные алгоритмические языки. К директивным языкам относятся такие классические языки программирования, как Algol, Fortran, Basic, Pascal, C. Наиболее существенными классами декларативных языков являются функциональные (functional) или аппликативные, и логические (logic) языки. К категории функциональных языков относятся, например, Lisp и Haskell. Самым известным языком логического программирования является Prolog (Пролог). Среди объектно-ориентированных языков программирования (языков ООП) отметим C++, Java, Python и Ruby. Отложим пока обсуждение концепции ООП и поговорим о различии между первыми двумя парадигмами. Главное заключается в следующем: декларативная программа заявляет (декларирует), что должно быть достигнуто в качестве цели, а директивная предписывает, как ее достичь. Поясним это на следующем примере. Предположим, вам надо пройти в городе из пункта А в пункт Б. Декларативная программа - это план города, в котором указаны оба пункта, плюс правила уличного движения. Руководствуясь этими правилами и планом города, курьер сам найдет путь от пункта А к пункту Б. Директивная программа - это список команд примерно такого рода: от пункта А по ул. Садовой на север до площади Славы, оттуда по ул. Пушкина два квартала, потом повернуть направо и идти до Театрального переулка, по этому переулку налево по правой стороне до дома 20, который и есть пункт Б. В директивной программе действия задаются явными командами, подготовленными ее составителем. Исполнитель же просто им следует. Хотя команды в различных языках директивного программирования и выглядят по-разному, все они сводятся либо к присваиванию какой-нибудь переменной некоторого значения, либо к выбору следующей команды, которая должна будет выполняться. Присваиванию может предшествовать выполнение ряда арифметических и иных операций, вычисляющих требуемое значение, а команды выбора реализуются в виде условных операторов и операторов повторения (циклов). Для классических директивных языков характерно, что последовательность выполняемых команд совершенно однозначно определяется ее входными данными. Как говорят, поведение исполнителя императивной программы полностью детерминировано. Декларативные программы не предписывают выполнять определенную последовательность действий, в них лишь дается разрешение совершать их. Исполнитель должен сам найти способ достижения поставленной перед ним составителем программы (программистом) цели, причем зачастую это можно сделать различными способами - детерминированность в данном случае отсутствует. Нельзя сказать, что один язык лучше другого только потому, что в нем есть возможности, которые в другом отсутствуют. Здесь более важно не то, какими возможностями обладает язык, а то, насколько имеющиеся в нем возможности поддерживают избранный стиль программирования для решения определенного круга задач. Ну, да, чуть-чуть. Согласен, сплайнить нельзя, надо сглаживать, но опять же поверхность то ломанная, вот бы её рассчитать плавной.
Оффтоп (Move your mouse to the spoiler area to reveal the content) Александр, а что там? Может кратко опишешь?
в делфях(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# еще симпатичнее наверное
нет пределу совершенства Код: 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. Правильная статья на эту тему Неочевидные особенности вещественных чисел. Вот только характеристику числа почему-то называет экспонентой.
В свое время вышел на эту же статью как раз из-за якобы абсурдных ситуаций; впрочем "абсурдность" относительно быстро выявляется отладчиком. если помнить о внутреннем формате вещ.чисел, о "необязательной точности" extended и не делать сравнений вроде этого: " var R:Single; begin R:=0.1; if R=0.1 then Label1.Caption:='Равно'" в общем-то не страшно. А использование extended обосновывается максимальной производительностью: " extended – это родной для сопроцессора тип, а типы Single и Double получаются из него очень простым усечением При загрузке числа типа Single или Double во внутренний регистр сопроцессора последний конвертирует их в Extended. Внутренние же операции всегда выполняются с данными типа Extended " не знаю, на сколько конкретно падает производительность за счет "конвертирует их в Extended" однако сталкивался с существенным падением производительности при преобразовании типов в большом объеме вычислений.
Интересная у Вас тема. Читая её даже сообразить не могу: толи я дурак такой, толи вы такие умные. Себя по наивности считал слегка программистом. Хотя бы что-то из того, что вы описали выше - в каком программном продукте искать??
Почти. Если речь идёт об арифметике в соответствии с IEЕE-754, то в single и double у мантиссы есть скрытый бит, у extended его нет. Отличаются также характеристиками. Вообще то, зависит от PSW. Выигрыша в скорости при снижении разрядности вычислений почти никакого. Extended проигрывает double из-за скорости загрузки из памяти в стек FPU. Наиболее быстро операция происходит для операндов, чей адрес выровнен на границу 8 байт. При загрузке элементов массива Extended добавляются штрафные такты для тех элементов, адрес которых не кратен 8. Извините не понял вопроса. З.Ы. Ага. Дурак. из тех дураков, что семерых умных за пояс заткнут и не моргнут.
Правильно отобразить рельеф в принципе не возможно : 1- недостаточная плотность пикетов; 2- даже если вводить структурные линии, триангуляция будет с глюками; 3- точки интерполяции соединяются прямыми (ломанными), которые сглаживаются "на глазок". А задача решена ещё при царе Горохе. Топограф в поле максимально плотно (в разумных пределах) выбирал особенности рельефа и изображал его ломанными линиями. Затем специальный художник (или сам топограф) сглаживал их вручную по принципу "что бы было красиво". И по инструкции (по общему соглашению) рельеф горизонталями отображается с точностью 1\4 и 1\3 сечения. А алгоритм творчества ещё никто не создал.
Похоже вы правы. в приведенном примере Double иногда даже быстрее. Хотя тригоном.функции на входе и выходе Extended. В среднем почти одинаково. (возможно пример и корявый, первое что пришло в голову) словами Stout:"нет пределу совершенства"
Если сам снимал, ходил с вешкой, то я всегда руками подправлял горизонтали, например на дне канавы вместо ) я их правил на >, даже будучи сглаженные, и красиво отображенные программно. Но сейчас бы я этого делать не стал, да и в будущем не стану, ведь горизонтали - так для красоты, общего понимания, а все работы проводятся по поверхности триангуляции. Поэтому "правильно отобразить рельеф" сильно то и не кому не надо, всё равно бульдозер с экскаватором пригонят и нафиг всё сровняют
ребят я с вами. Кому нужно может. Блоки с автоматическими отслеживаемыми координатами выводимыми в атрибуты с возможностью автоматической нумерации и составления текстового файла job с ними. Написано в VBA
Не знал куда вопрос задать, решил здесь написать т.к. вопрос специфический. Проблема вот в чем: ГОСТ 51794-2008 проблема в преобразовании геодезических координат из системы А в систему Б (п. 5.3). Интересует только метод из географической системы в географическую минуя перевода координат в пространственно прямоугольные. Ниже прикреплю код в C#, выходные значения переменных не соответствуют действительности. Испробовал много разных формул, но меньше метра по точности в плане не приблизился, про высоты вообще молчу. Для контроля использую LGO, данные датума соответствует входящим переменным метода. В чем может быть проблема?