Я новичок в Python, и у меня есть сфера радиуса (R) с центром в (x0, y0, z0).Теперь мне нужно найти те точки, которые находятся либо на поверхности сферы, либо внутри сферы, например, точки (x1, y1, z1), которые удовлетворяют ((x1-x0) ** 2+ (y1-y0) ** 2+ (z1-x0) * 82) ** 1/2 <= R. Я хотел бы вывести только координаты этих точек в виде массива с нулевыми углами.Вывод будет выглядеть примерно так - [[x11, y11, z11], [x12, y12, z12], ...].Пока у меня есть следующий код - </p>
import numpy as np
import math
def create_points_around_atom(number,atom_coordinates):
n= number
x0 = atom_coordinates[0]
y0 = atom_coordinates[1]
z0 = atom_coordinates[2]
R = 1.2
for i in range(n):
phi = np.random.uniform(0,2*np.pi,size=(n,))
costheta = np.random.uniform(-1,1,size=(n,))
u = np.random.uniform(0,1,size=(n,))
theta = np.arccos(costheta)
r = R * np.cbrt(u)
x1 = r*np.sin(theta)*np.cos(phi)
y1 = r*np.sin(theta)*np.sin(phi)
z1 = r*np.cos(theta)
dist = np.sqrt((x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
distance = list(dist)
point_on_inside_sphere = []
for j in distance:
if j <= R:
point_on_inside_sphere.append(j)
print('j:',j,'\tR:',R)
print('The list is:', point_on_inside_sphere)
print(len(point_on_inside_sphere))
kk =0
for kk in range(len(point_on_inside_sphere)):
for jj in point_on_inside_sphere:
xx = np.sqrt(jj**2-y1**2-z1**2)
yy = np.sqrt(jj**2-x1**2-z1**2)
zz = np.sqrt(jj**2-y1**2-x1**2)
print("x:", xx, "y:", yy,"z:", zz)
kk +=1
И я запускаю его - create_points_around_atom(n=2,structure[1].coords)
, где structure[1].coords
- это массив из трех координат.