Сферическая тепловая карта Вороного в проекции МоллвейдеPython

Программы на Python
Ответить
Anonymous
 Сферическая тепловая карта Вороного в проекции Моллвейде

Сообщение Anonymous »

Используя Python, я хочу отобразить скалярное распределение, определенное по сфере, и визуализировать его с помощью проекции Моллвейде. Проблема, с которой я имею дело, — это разрыв, вызванный проекцией.
Изначально мое распределение определяется N точками выборки и N соответствующими значениями скалярного поля. Поскольку точки расположены на сфере, в целом они расположены неравномерно. Это предполагает использование тепловой карты Вороного со следующей реализацией Scipy в сферическом случае.
Из объекта SphericalVoronoi Scipy можно получить доступ к списку регионов (ячейки Вороного) с трехмерными координатами каждой вершины ячейки. Эти координаты можно сопоставить с долготой и широтой, чтобы визуализировать регионы, используя такой код:

Код: Выделить всё

from matplotlib.patches import Polygon
def plot_region(region, ax):
n = len(region)
color = cmap(np.random.uniform(0, 1))
poly_long_lat = np.array([long_lat_from_xyz(*tuple(sv.vertices[i, :]))
for i in region + [region[0]]])
poly = Polygon(poly_long_lat, color=color)
ax.add_patch(poly)
Применение этого ко всем ячейкам приводит к беспорядку в регионах вблизи границы проекции Моллвейде. Эти проблемные регионы характеризуются наличием как минимум двух вершин с долготой противоположного знака (но близкой к pi по абсолютной величине, при условии, что N достаточно велико и точки выборки распределены равномерно). Вот пример, где такие регионы обозначаются красным крестом в точке генератора:
Изображение

Чтобы решить эту проблему, моей первой идеей было бы сделать следующее:
  • Идентифицировать все проблемные области (уже сделано, критерий с долготой)
  • вдоль каждого края ячейки между двумя вершинами противоположной долготы добавьте две вершины с долготой np.pi + e и np.pi - e, где e = 1e-10 — некоторое небольшое число.
  • Разделите каждую ячейку на два подмножества вершин с долготами противоположного знака, включая четыре, добавленные в предыдущем шаг
  • Постройте каждое подмножество как одну ячейку Вороного, хотя оба подмножества соответствуют одному и тому же значению скалярного распределения, которое мы выбираем.
Из-за добавления точек вдоль обрезанных краев новые ячейки Вороного покрывают всю видимую поверхность без перекрытия. Однако весь процесс кажется совершенно непрактичным.
Есть ли у вас какие-либо предложения по упрощению процесса с учетом того, что я работаю с Python? Любые советы или идеи по улучшению будут приветствоваться!

Подробнее здесь: https://stackoverflow.com/questions/798 ... projection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»