Я пытаюсь использовать matplotlib shapef для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не генерируются по всей поверхности сферы, а также в данных много пробелов. Может кто-нибудь объяснить, как этого можно достичь?
Обратите внимание, что я не хочу решать эту проблему путем создания текстуры из контура, а затем обертывания сферы текстурой. Я хочу перевести полигональные пути, сгенерированные контуром, и напрямую перенести эти пути на сферу.
Я пытаюсь использовать matplotlib shapef для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не генерируются по всей поверхности сферы, а также в данных много пробелов. Может кто-нибудь объяснить, как этого можно достичь? Обратите внимание, что я не хочу решать эту проблему путем создания текстуры из контура, а затем обертывания сферы текстурой. Я хочу перевести полигональные пути, сгенерированные контуром, и напрямую перенести эти пути на сферу. [code]from vpython import vector
import numpy as np from matplotlib import pyplot as plt
def create_polygon(region, temp_color): if len(region) < 3: # Can't form a polygon with fewer than 3 points return
# Calculate the centroid of the region centroid = vec(sum(p[0] for p in region) / len(region), sum(p[1] for p in region) / len(region), sum(p[2] for p in region) / len(region))
# Tessellate the region into triangles for i in range(len(region) - 1): v0 = vec(*region[i]) v1 = vec(*region[i + 1]) triangle( v0=vertex(pos=v0, color=temp_color), v1=vertex(pos=v1, color=temp_color), v2=vertex(pos=centroid, color=temp_color) )
def split_contours(segs, kinds=None): if kinds is None: return segs # nothing to be done new_segs = [] for i, seg in enumerate(segs): segkinds = kinds[i] boundaries = [0] + list(np.nonzero(segkinds == 79)[0]) for b in range(len(boundaries) - 1): new_segs.append(seg[boundaries[b] + (1 if b > 0 else 0):boundaries[b + 1]]) return new_segs
allsegs = contours.allsegs allkinds = contours.allkinds colors = cmap(norm(coarse_temps)) rgb_colors = [ tuple(int(c * 255) for c in color[:3]) for color in colors.reshape(-1, colors.shape[-1]) ] for clev in range(len(contours.allsegs)): kinds = None if allkinds is None else allkinds[clev] segs = split_contours(allsegs[clev], kinds) rgb = cmap(clev)[:3] coords = [spherical_to_cartesian(lat, lon, radius=3) for seg in segs for lon, lat in seg] temp_color = vector(*rgb) create_polygon(coords, temp_color)
import time while True: time.sleep(0.03) [/code] Вот как отображается сфера. Я хотел бы, чтобы контуры отображались на поверхности сферы, как если бы 2D-контуры были проецированы на 3D-поверхность. [img] [/img]
Я пытаюсь использовать matplotlib shapef для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не...
Я пытаюсь использовать matplotlib shapef для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не...
Я пытаюсь использовать matplotlib shapef для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не...
Я пытаюсь использовать matplotlib контурф для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не...
Я пытаюсь использовать matplotlib контурф для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не...