Модификация Scaled Scatter - PullRequest
       6

Модификация Scaled Scatter

0 голосов
/ 07 ноября 2019

Я пытаюсь построить геометрию, состоящую из сферических поверхностей, в 3D. Есть десятки тысяч этих сфер, с заданными координатами, радиусом и цветом для каждой из них.

Я хочу использовать разброс с трехмерной осью (mpl_toolkits.mplot3d.Axes3D), потому что я не нашел более эффективного способасделать это в 3D. Я также не могу использовать Mayavi. Тем не менее, я хотел бы видеть свою геометрию в масштабе, это означает, что шары должны иметь заданный радиус в масштабе XYZ (метры).

После некоторых исследований кажется, что размер, который мне нужно предоставитьscatter - это поверхность в pt ^ 2, где 1 pt = dpi / 72 пикселя. Мне нужно создать новую функцию scatter2, где находится поверхность (диска или сферы, я не уверен ...)дается в метрах ^ 2, преобразуйте его в пиксели ^ 2, которые затем преобразуются в pt ^ 2.

Кто-нибудь знает, как заполнить эти метры ^ 2 => пикселей ^ 2?

Кроме того, если у вас есть лучшее (более простое и / или более быстрое в работе) решение, я был бы рад услышать об этом.

Наконец, даже при использовании scatter сюжет очень медленный, когда я пытаюсьвращать геометрию. Это нормально? Могу ли я добавить что-то в мой код, чтобы ускорить графическую обработку?

Вот мой код на данный момент:

from random import random
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def scatter2(fig,ax,x,y,z,c,s_meters2):
    s_pixels2 = [s_meters2[i]*1 for i in range(len(s_meters2))] # meters^2 => pixels^2,how to do?
    s_pt2 = [s_pixels2[i]*fig.dpi/72 for i in range(len(s_pixels2))] # pixels^2 => pt^2
    ax.scatter3D(x,y,z,c=c,s=s_pt2)

if __name__ == "__main__":
    n_spheres = 50000
    x = [random()*100 for i in range(n_spheres)]
    y = [random()*100 for i in range(n_spheres)]
    z = [random()*100 for i in range(n_spheres)]
    s = [random()*1 for i in range(n_spheres)]
    c = [[random(),random(),random()] for i in range(n_spheres)]

    fig = plt.figure()
    ax = plt.subplot(111, projection='3d')
    scatter2(fig,ax,x,y,z,c,s)

Пожалуйста, скажите мне также, если это запрограммировано и синтаксисвсе в порядке, я новичок.

Спасибо!

...