" title="Написать письмо">Написать письмо

Статистика

Пользователи : 1
Статьи : 2482
Просмотры материалов : 10588902
 
Анализ участков мировой карты (04.03.2024). Печать E-mail
2024 - Март
04.03.2024 17:30
Save & Share
Взаимодействие с картой планеты и её данными требует не только тщательной оптимизации скорости работы исходного кода - но и контейнеров данных. В данной работе планета охвачена целиком. Вдобавок к этому, идёт взаимодействие именно с глючными картами ГИС компании Панорама, в глючной среде программирования Qt, в глючной операционной системе Astra Linux. Это была самая сложная из задач, что программировались в жизни.

Оформленное экспертное заключение об отсутствии в тексте сведений, составляющих государственную тайну, не позволяет выйти за пределы текста этого заключения - материал предоставляется как есть, с некоторыми неточностями.




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

Выбор своей ОС и среды разработки - крайне важный момент в ускорении разработки, и это право нужно у заказчика выбивать. Попытавшись писать это в связке Astra+Qt - стошнило, и выбрал Windows XP x32 и Borland C++ Builder v.6.0.

Несмотря на то, что разработка пошла быстро, - проблема возникла с уравнениями прямых:
- в Qt long double было необходимостью (чтобы, в корректно пересечения линий друг с другом находить - <1мс при 100мс в 1с координат). Так же оказалось и здесь: точности double не хватило даже для расчёта K и B в уравнении прямой (обратный расчёт выдавал ошибку);
- сколько реальных знаков после запятой было у long double в Qt - неизвестно. Одновременно, нет возможности включить наивысшую точность long double через _control87() в float.h: нет константы PC_80, а PC_64 - ломала точность у double вообще полностью;
- поэтому, пришлось написать свою функцию сравнения long double и вычислить реальную точность при >126млрд вычислений: 4.5475e-013L - между 12-13 знаками после запятой (погрешность постоянно меняется - при одних и тех же вычислениях). Но в тесте учитывались максимальные значения X и Y 1млн - пришлось повторить тест для 129.6млн (максимум мс в координатах, без учёта знака широты) - расчёты будут идти очень долго;
- ИИ опять отличился своей тупизной: то миллисекунд в координатах не существует (когда вот он, реальный проект на экране открыт), то константа PC_80 не число (число 0x2 по факту), то точность double пишет 15-17 знаков (а в уточнении рядом - уже 6);
- randomize() - надо вызывать при старте программы 1 раз, а не каждый раз перед вызовом random().

(добавлено 27.06.2026) Небольшие уточнения по погрешностям long double (не смог закончить корректно).

(добавлено 26.08.2026) Для тестирования механизма работы с картой мира - может потребоваться генератор телеметрии. На практике - не удалось его написать: СБ помешала. Но можно оптимальный алгоритм разработки здесь описать:
- автоматическое создание площадных зон (сохранение координат в XML-формате) - подкупает простотой, но не даёт возможности создать контролируемую фигуру. Есть правила для рисования линий последовательно: не выходят за внутренний диаметр, входят во внешний диаметр (фигуры могут быть не кругом, а прямоугольником, - да чем угодно). Есть иные правила: линии не должны пересекаться, ограничение их количества и т.д. В итоге, автоматизация процесса становится слишком трудозатратной;
- поэтому путь - ручная отрисовка. Есть прямоугольник Малевича (проекция Меркатора 2:1), развёрнутый на весь экран (координаты мировой карты этого прямоугольника задаются вручную). Тыкаешь мышкой в пиксель - идёт примерный расчёт координат (интерполяция), а уточнение до минут-секунд-миллисекунд можно с помощью рандома сделать. Таким образом, тыкая мышкой в рисунок, - создаётся именно фигура, необходимая для конкретного узкого теста, - а не набор автоматических хаотичных зон.
Обновлено ( 26.08.2026 18:48 )
 
 

Последние новости


©2008-2026. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru