Питон: пересечение сфер - PullRequest
       1

Питон: пересечение сфер

0 голосов
/ 08 января 2019

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

Параметрическое представление сферы:

Код, который я имею, изменен из ответа от Python / matplotlib: построение трехмерного куба, сферы и вектора? , добавление возможности диктовать начало координат x, y и z и радиус сферы. Многие подобные вопросы были написаны на C ++, Java и C #, которые я совсем не могу понять (я почти не знаю, что я делаю, так что будь проще для меня).

Мой код:

import numpy as np

def make_sphere_x(x, radius):
  u, v = np.mgrid[0:2 * np.pi:5000j, 0:np.pi:2500j]
  x += radius * np.cos(u) * np.sin(v)
  return x

def make_sphere_y(y, radius):
  u, v = np.mgrid[0:2 * np.pi:5000j, 0:np.pi:2500j]
  y += radius * np.sin(u) * np.sin(v)
  return y

def make_sphere_z(z, radius):
  u, v = np.mgrid[0:2 * np.pi:5000j, 0:np.pi:2500j]
  z += radius * np.cos(v)
  return z

#x values
sphere_1_x = make_sphere_x(0, 2)
sphere_2_x = make_sphere_x(1, 3)
sphere_3_x = make_sphere_x(-1, 4)
#y values
sphere_1_y = make_sphere_y(0, 2)
sphere_2_y = make_sphere_y(1, 3)
sphere_3_y = make_sphere_y(0, 4)
#z values
sphere_1_z = make_sphere_z(0, 2)
sphere_2_z = make_sphere_z(1, 3)
sphere_3_z = make_sphere_z(-2, 4)

#intercept of x-values
intercept_x = list(filter(lambda x: x in sphere_1_x, sphere_2_x))
intercept_x = list(filter(lambda x: x in intercept_x, sphere_3_x))
print(intercept_x)

Проблемы:

  1. Очевидно, что должен быть лучший способ найти перехваты. Прямо сейчас код генерирует точки через равные интервалы с числом интервалов, которое я определяю под мнимым числом в np.mgrid. Если это увеличивается, шансы на пересечение должны увеличиться (я думаю), но когда я пытаюсь увеличить его до 10000j или выше, он просто выплевывает ошибку памяти.

  2. В массиве есть очевидные пробелы, и этот метод, скорее всего, будет ошибочным, даже если у меня есть доступ к суперкомпьютеру и я могу довести значение до непристойного значения. Прямо сейчас код приводит к нулевому набору.

  3. Код крайне неэффективен, не то, что это приоритет, но людям нравятся вещи в тройках, верно?

Не стесняйтесь разжигать меня за ошибки новичка в кодировании или задавать вопросы о переполнении стека. Ваша помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...