Сделайте сферу из круга точек

#python #numpy #matplotlib #geometry

Вопрос:

У меня есть круг, круг из точек, Теперь мне нужно сделать сферу. Не мог бы кто-нибудь помочь мне с этим. Я думаю, что мне нужно использовать x 2 y 2 z 2 <= R 2 и использовать модуль Axes3D.

 import numpy
import matplotlib.pyplot as plt


X = list(range(1, 101))
Y = list(range(1, 101))


x = numpy.array(X)
y = numpy.array(Y)

xgrid, ygrid = numpy.meshgrid(x, y)

plt.style.use('seaborn')
fig, ax = plt.subplots()

filter = (xgrid-50)**2   (ygrid-50)**2 <= 25**2
ax.scatter(xgrid[filter], ygrid[filter], s= 1, color='green')

ax.set_title('сетка из точек 100х100',
            fontfamily = 'monospace',
            fontstyle = 'normal',
            fontweight = 'bold',
            fontsize = 10)
ax.set_xlabel("Value", fontsize=14)
ax.set_ylabel("Square of Value", fontsize=14)

ax.tick_params(axis='both', which='major', labelsize=14)

ax.axis([0, 101, 0, 101])

plt.show()
 

Комментарии:

1. Чего именно ты хочешь? Вам нужна сфера заданного радиуса R? Если это так, то как следует решать внутренние вопросы? В прямоугольной сетке?

Ответ №1:

Это то, что вы ищете? Я не рекомендую набирать так много очков, хотя это довольно тяжело, попробуйте набирать меньше очков (как в комментариях к коду)…

Также попробуйте не использовать «фильтр», это зарезервированное ключевое слово в Python

 import numpy as np
import matplotlib.pyplot as plt

# define sphere parameters
cX, cY, cZ = 50, 50, 50
radius = 25

x = np.array(range(0, 101))
y = np.array(range(0, 101))
z = np.array(range(0, 101))

# try that instead, it is less heavy
# x = np.array(range(0, 101, 5))
# y = np.array(range(0, 101, 5))
# z = np.array(range(0, 101, 5))

xgrid, ygrid, zgrid = np.meshgrid(x, y, z)

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

check = (xgrid - cX)**2   (ygrid - cY)**2   (zgrid - cZ)**2 <= radius**2
ax.scatter(xgrid[check], ygrid[check], zgrid[check], color='green')

ax.set_title('сетка из точек 100х100',
            fontfamily = 'monospace',
            fontstyle = 'normal',
            fontweight = 'bold',
            fontsize = 10)
ax.set_xlabel("Value", fontsize=14)
ax.set_ylabel("Square of Value", fontsize=14)

ax.set_xlim3d(0, 101)
ax.set_ylim3d(0, 101)
ax.set_zlim3d(0, 101)

plt.show()
 

Комментарии:

1. Спасибо тебе, Тартемпион, за твою помощь! И спасибо вам за ваш совет по использованию зарезервированного ключевого слова «фильтр»!