Я разобрался с решением, но не понимаю, почему оно работает. С математической точки зрения нет ничего плохого в моих определениях преобразования для x, y и z (после того, как я его погуглил и посмотрел в учебнике). Однако я увидел еще один пост, в котором кто-то определил эти координаты немного по-другому (замена синусов косинусами для всех фи-компонентов) без объяснения причин. Следующее сработало, когда я заменил это:
xrand = RStart*np.sin(phirand)*np.cos(thetarand)
yrand = RStart*np.sin(phirand)*np.sin(thetarand)
zrand = RStart*np.cos(phirand)
С этим:
xrand = RStart*np.cos(phirand)*np.cos(thetarand)
yrand = RStart*np.cos(phirand)*np.sin(thetarand)
zrand = RStart*np.sin(phirand)
Опять же, я понятия не имею, почему это работает, но @Jenny дал подсказку на другой пост, который спрашивал Другой вопрос о том же коде. Использование [-90,90] вместо [0,180], вероятно, является причиной этого изменения, но, опять же, я не уверен, почему, поскольку sin [0,90,180] -> [0,1,0], а cos [-90,0 , 90] -> [0,1,0] и оба охватывают одинаковые числовые диапазоны. Если у кого-то есть solid математическая / кодовая причина для этого, пожалуйста, прокомментируйте мой ответ, чтобы объяснить дальше.