#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. Спасибо тебе, Тартемпион, за твою помощь! И спасибо вам за ваш совет по использованию зарезервированного ключевого слова «фильтр»!