Кто-нибудь пользуется Surfer?

Elina74

Я тут пишу проектик "под себя".
qColorMap ( http://sourceforge.net/projects/qcolormap/ )
Цель - создать свободное ПО подобное Golden Software Surfer в той его части функций, которая рисует карты 3D данных на 2D плоскости. Значение Z кодируется цветом (так называемые карты classed post).
Скриншотики.

Распределение потоков протонов на высоте ~600 км по данным спутника SAMPEX

график функции z = sin(x^2+y^2)/(x^2+y^2)

часть первого рисунка в области так называемой Южно-Атлантической Аномалии
Кому-нибудь кроме меня это вообще может быть полезно?

Marusetta

возможно
для каких целей пишешь, если не секрет?

Elina74

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

serega1604

а qtiplot этого не сумеет сделать?

Marusetta

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

Elina74

Данные действительно не упорядочены и их дохрена. Все их в памяти я не держу. Просто считываю очередное значение из файла и рисую точку на рисунке. Если в той координате уже что-то было, я на это забиваю. Метод полезен не для поиска отдельных всплесков в какой-то точке, а в протяженном пространстве, если таких событий достаточно много.
Рисование контуров с помощью всяких мат. алгоритмов - слишком ресурсоемкая задача, плюс при их применении могут возникнуть артефакты - как будто данные есть там, где их не было в исходном файле.
Я перепробовал множество разных open-source программ, но они либо не умеют этого делать, либо грузят все данные в память, после чего падают.

Marusetta

как вариант могу предложить не грузить все в память, а рендерить в картинку, а потом обрабатывать
единственно, хочу предупредить - разрешение должно быть как минимум в 4 раза больше по каждой оси, чем на выходе
еще как вариант можно структурировать входные данные на этапе генерации

Elina74

зачем?
можно чуть поподробнее?

Marusetta

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

Elina74

не буду спорить, что так можно сделать, но делать так не хочу

Marusetta

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

AlexV769

Я пропустил, а сколько точек ты хочешь обработать?

Elina74

миллион тебя устроит в качестве верхней грани? :)
Оставить комментарий
Имя или ник:
Комментарий: