Нахождение точек пересечения между 3 сферами

Используя плагин Innodb, операторы ALTER TABLE, которые только добавляют или отбрасывают вторичные индексы, могут быть сделаны "быстро", т.е. не восстанавливая таблицу.

Вообще говоря, однако, в MySQL, любой ALTER TABLE включает восстановление всей таблицы, которая может занять очень долгое время (т.е. если таблица имеет полезный объем данных в ней).

действительно необходимо разработать приложение так, чтобы операторы ALTER TABLE не должны были регулярно делаться; Вы, конечно, не хотите ALTER TABLE, сделанного во время нормального выполнения приложения, если Вы не готовы ожидать, или Вы изменяете крошечные таблицы.

10
задан Adam 10 September 2009 в 16:36
поделиться

4 ответа

ОБНОВЛЕНИЕ

Реализацию этого ответа на Python вместе с примером использования можно найти в этом репозитории github.

Получается аналитическое решение на самом деле довольно хорошо использовать этот метод и может сказать вам, когда решение существует, а когда нет (также возможно иметь ровно одно решение.) Нет причин использовать метод Ньютона.

ИМХО, это далеко проще для понимания и проще, чем приведенная ниже трилатерация. Однако в моем тестировании оба метода дают правильные ответы.

ОРИГИНАЛЬНЫЙ ОТВЕТ

Рассмотрим пересечение двух сфер. Чтобы визуализировать это, рассмотрим трехмерный отрезок N, соединяющий два центра сфер. Рассмотрим это поперечное сечение

alt text
(источник: googlepages. com )

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

При этом давайте перейдем к поиску пересечения. Во-первых, мы хотим описать получившийся круг пересечения двух сфер. Вы не можете сделать это с помощью 1 уравнения, круг в 3D, по сути, является кривой в 3D, и вы не можете описать кривые в 3D с помощью 1 уравнения.

Рассмотрим рисунок и должен лежать в плоскости с нормалью N.

При этом давайте перейдем к поиску пересечения. Сначала мы хотим описать получившийся круг пересечения двух сфер. Вы не можете сделать это с помощью 1 уравнения, круг в 3D, по сути, является кривой в 3D, и вы не можете описать кривые в 3D с помощью 1 уравнения.

Рассмотрим рисунок и должен лежать в плоскости с нормалью N.

При этом давайте перейдем к поиску пересечения. Сначала мы хотим описать получившийся круг пересечения двух сфер. Вы не можете сделать это с помощью 1 уравнения, круг в 3D, по сути, является кривой в 3D, и вы не можете описать кривые в 3D с помощью 1 уравнения.

Рассмотрим рисунок alt text
(источник: googlepages.com )

пусть P будет точкой пересечения синей и красной линий. Пусть h - длина отрезка красной линии от точки P вверх. Обозначим расстояние между двумя центрами через d. Пусть x будет расстоянием от центра малого круга до P. Тогда у нас должно быть

x^2 +h^2 = r1^2
(d-x)^2 +h^2 = r2^2
==> h = sqrt(r1^2 - 1/d^2*(r1^2-r2^2+d^2)^2)

, то есть вы можете найти h, который является радиусом круга пересечения. Вы можете найти центральную точку C окружности от x, вдоль линии N, которая соединяет 2 центра окружности.

Затем вы можете полностью описать окружность как (X, C, U, V - все векторы)

X = C + (h * cos t) U + (h * sin t) V for t in [0,2*PI)

где U и V - перпендикулярные векторы, лежащие в плоскости с нормалью N.

Последняя часть самая простая. Осталось только найти пересечение этой окружности с конечной сферой. Это просто набор уравнений (подставьте для x, y, z в последнем уравнении параметрические формы x, y, z для круга через t и решите для t.)

edit ---

Уравнение, которое вы получите, на самом деле довольно уродливое, вы будете иметь целый набор синусов и косинусов, равных чему-то. Чтобы решить эту проблему, вы можете сделать это двумя способами:

  1. запишите косинусы и синусы в терминах экспонент, используя равенство

    e ^ (it) = cos t + i sin t

    , затем сгруппируйте все e ^ ( it), и вы должны получить квадратные уравнения для e ^ (it) которую вы можете решить для квадратной формулы, а затем решить для t. Это даст вам точное решение. Этот метод на самом деле скажет вам точно, существует ли решение, два существуют или одно существует в зависимости от того, сколько точек из квадратичного метода являются действительными.

  2. используйте метод Ньютона для решения для t, этот метод не является точным, но его вычислительные намного проще для понимания, и в этом случае он будет работать очень хорошо.

7
ответ дан 3 December 2019 в 14:53
поделиться

Обычно вам нужно сделать это за 3 шага. Допустим, у вас есть три сферы: S1, S2 и S3.

  1. C12 - это круг, образованный пересечением S1 и S2.
  2. C23 ​​- это круг, образованный пересечением S2 и S3.
  3. ] P1, P2 - точки пересечения C12 и C13.

Единственная действительно сложная часть здесь - это пересечение сфер, и, к счастью, Mathworld решила это довольно хорошо . Фактически, Mathworld также имеет решение для пересечения кругов .

На основе этой информации вы сможете создать алгоритм.

6
ответ дан 3 December 2019 в 14:53
поделиться

Вот еще одна интерпретация картинки, которую Эрик разместил выше:

Пусть H будет плоскостью, натянутой на центры трех сфер. Пусть C1, C2, C3 - точки пересечения сфер с H, тогда C1, C2, C3 - окружности. Пусть Lij - прямая, соединяющая две точки пересечения Ci и Cj, тогда три прямые L12, L23, L13 пересекаются в одной точке P. Пусть M - прямая, ортогональная H через P, тогда две точки пересечения лежат на линия M; следовательно, вам просто нужно пересечь M с любой из сфер.

1
ответ дан 3 December 2019 в 14:53
поделиться

Probably easier than constructing 3D circles, because working mainly on lines and planes:

For each pair of spheres, get the equation of the plane containing their intersection circle, by subtracting the spheres equations (each of the form X^2+Y^2+Z^2+aX+bY+c*Z+d=0). Then you will have three planes P12 P23 P31.

These planes have a common line L, perpendicular to the plane Q by the three centers of the spheres. The two points you are looking for are on this line. The middle of the points is the intersection H between L and Q.

To implement this:

  • compute the equations of P12 P23 P32 (difference of sphere equations)
  • compute the equation of Q (solve a linear system, or compute a cross product)
  • compute the coordinates of point H intersection of these four planes. (solve a linear system)
  • get the normal vector U to Q from its equation (normalize a vector)
  • compute the distance t between H and a solution X: t^2=R1^2-HC1^2, (C1,R1) are center and radius of the first sphere.
  • solutions are H+tU and H-tU

alt text

A Cabri 3D construction showing the various planes and line L

8
ответ дан 3 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: