相关疑难解决方法(0)

在球形体积内采样均匀分布的随机点

我希望能够生成一个随机均匀的粒子位置样本,该样本落在球形体积内.

下图(http://nojhan.free.fr/metah/提供)显示了我要找的内容.这是穿过球体的切片,显示了点的均匀分布:

均匀分布的圆圈

这就是我目前得到的:

均匀分布但是聚类点

由于球面和笛卡尔坐标之间的转换,您可以看到中心有一组点.

我使用的代码是:

def new_positions_spherical_coordinates(self):
   radius = numpy.random.uniform(0.0,1.0, (self.number_of_particles,1)) 
   theta = numpy.random.uniform(0.,1.,(self.number_of_particles,1))*pi
   phi = numpy.arccos(1-2*numpy.random.uniform(0.0,1.,(self.number_of_particles,1)))
   x = radius * numpy.sin( theta ) * numpy.cos( phi )
   y = radius * numpy.sin( theta ) * numpy.sin( phi )
   z = radius * numpy.cos( theta )
   return (x,y,z)
Run Code Online (Sandbox Code Playgroud)

下面是一些MATLAB代码,据说可以创建一个统一的球形样本,类似于http://nojhan.free.fr/metah给出的等式.我似乎无法破译它或理解他们做了什么.

function X = randsphere(m,n,r)

% This function returns an m by n array, X, in which 
% each of the m rows has the n Cartesian coordinates …
Run Code Online (Sandbox Code Playgroud)

python random matlab geometry uniform-distribution

36
推荐指数
3
解决办法
4万
查看次数

设置matplotlib 3d绘图长宽比?

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
Run Code Online (Sandbox Code Playgroud)

设置宽高比适用于2d图:

ax = plt.axes()
ax.plot([0,1],[0,10])
ax.set_aspect('equal','box')
Run Code Online (Sandbox Code Playgroud)

但不适用于3D:

ax = plt.axes(projection='3d')
ax.plot([0,1],[0,1],[0,10])
ax.set_aspect('equal','box')
Run Code Online (Sandbox Code Playgroud)

是否有不同的3d案例语法,或者它没有实现?

python matplotlib

36
推荐指数
10
解决办法
2万
查看次数

生成分布在单位球体表面上的点的随机样本

我试图使用numpy在球体表面上生成随机点.我已阅读,解释均匀分布后在这里.但是,需要关于如何仅在球体表面上生成点的想法.我有坐标(x,y,z)和每个球体的半径.

我不是很熟悉这个级别的数学,而是试图理解蒙特卡罗模拟.

任何帮助都感激不尽.

谢谢,帕林

python geometry numpy random-sample uniform-distribution

16
推荐指数
2
解决办法
2万
查看次数

多面体/一组点中的最大体积内接椭球

稍后编辑:我在这里上传了我的原始数据样本。它实际上是DICOM格式的分割图像。这个结构的体积是 ~ 16 mL,所以我假设内部椭球体积应该小于这个。为了从 DICOM 图像中提取点,我使用了以下代码:

import os
import numpy as np
import SimpleITK as sitk


def get_volume_ml(image):
    x_spacing, y_spacing, z_spacing = image.GetSpacing()
    image_nda = sitk.GetArrayFromImage(image)
    imageSegm_nda_NonZero = image_nda.nonzero()
    num_voxels = len(list(zip(imageSegm_nda_NonZero[0],
                              imageSegm_nda_NonZero[1],
                              imageSegm_nda_NonZero[2])))
    if 0 >= num_voxels:
        print('The mask image does not seem to contain an object.')
        return None
    volume_object_ml = (num_voxels * x_spacing * y_spacing * z_spacing) / 1000
    return volume_object_ml


def get_surface_points(folder_path):
    """
    :param folder_path: path to folder where DICOM images are stored
    :return: …
Run Code Online (Sandbox Code Playgroud)

python algorithm mathematical-optimization mosek cvxopt

9
推荐指数
2
解决办法
1111
查看次数