Почему мой круг на моей сфере становится восьмеркой? - PullRequest
1 голос
/ 23 марта 2020

вот код, о котором идет речь в названии этого номера, который у меня есть. У меня есть производные от руки формулы, лежащие в основе моего кода, так что, похоже, это не так ...

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import random as rdm

resol = 30
resolcirc = 15
r=1

########## THE SPHERE ##########
phi = np.linspace(0, np.pi*((resol-1)/resol), resol)
theta = np.linspace(0, 2*np.pi*((resol*2-1)/resol*2), resol*2)
phi, theta = np.meshgrid(phi, theta)

x = r * np.sin(phi) * np.cos(theta)
y = r * np.sin(phi) * np.sin(theta)
z = r * np.cos(phi)    

########## THE RANDOM POINT ##########
r1=1

randphi = rdm.random()*np.pi 
randtheta = rdm.random()*2*np.pi

x1 = r1 * np.sin(randphi) * np.cos(randtheta)
y2 = r1 * np.sin(randphi) * np.sin(randtheta)
z3 = r1 * np.cos(randphi) 

radpoint = 0.5

########## THE RANDOM CIRCLE ##########
rcirc=0.2
gamma = np.linspace(0, 2*np.pi*((resol-1)/resol), resol)

rotanglephi = -1 * rcirc * np.cos(gamma) 
rotangletheta = rcirc * np.sin(gamma)

psitheta=2*np.sin(-1*rcirc*np.cos(gamma)/r)
psiphi=2*np.sin(rcirc*np.sin(gamma)/r)

x1 = r1 * np.sin(randphi+psiphi) * np.cos(randtheta+psitheta)
y2 = r1 * np.sin(randphi+psiphi) * np.sin(randtheta+psitheta)
z3 = r1 * np.cos(randphi+psiphi) 

########## THE PLOT ###########
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c='y', marker='.')
ax.scatter(x1,y2,z3, c='r', marker = 'x',s=50)

plt.tight_layout()
#plt.axis('off')

plt.show()

Обычно это работает совершенно нормально, как и предполагалось, например: введите описание изображения здесь

Однако я не могу на всю жизнь выяснить, почему это вызывает у меня такое странное поведение сверху и снизу сферы: введите описание изображения здесь

Это абсолютный первый шаг этого кода, где мне нужно будет создать точку и сделать вокруг нее кольцо, которое будет двигаться по орбите на этой сферической поверхности. Помощь высоко ценится!

1 Ответ

0 голосов
/ 23 марта 2020

Ваше решение не определяет круг, оно кажется в зависимости от вашего тэта / фи

посмотрите на график со значениями, для

randphi = np.pi / 8 randtheta = -np.pi / 4

Я бы предложил определяя свой круг как пересечение плоскости со сферой здесь

...