比例散射修正

2024-09-23 12:02:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试绘制一个由三维球面组成的几何体。 有成千上万个这样的球体,每个球体都有给定的坐标、半径和颜色

我想使用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)

请告诉我,如果它的编程方式和语法是好的,我是一个初学者

谢谢大家!


Tags: inimportptforfigrangepltrandom