Изначально мое распределение определяется 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)

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