Рассмотрим пересечение двух сфер. Для наглядности рассмотрим отрезок N трехмерной линии, соединяющий два центра сфер. Рассмотрим это сечение
(источник: googlepages.com )
где красная линия - это поперечное сечение плоскости с нормальной N. Симметрично, вы можете повернуть это поперечное сечение под любым углом, и длина отрезков красной линии не может измениться. Это означает, что полученная кривая пересечения двух сфер является окружностью и должна лежать в плоскости с нормой N.
Как говорится, давайте перейдем к поиску пересечения. Сначала мы хотим описать результирующий круг пересечения двух сфер. Вы не можете сделать это с 1 уравнением, круг в 3D по сути является кривой в 3D, и вы не можете описать кривые в 3D на 1 экв.
Рассмотрим картинку
(источник: 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.)
редактировать ---
Уравнение, которое вы получите, на самом деле довольно уродливо, у вас будет целая куча синусов и косинусов, равных чему-то. Для решения этой проблемы вы можете сделать это двумя способами:
написать косинус и синус в терминах экспонент, используя равенство
e ^ (it) = cos t + i sin t
затем сгруппируйте все члены e ^ (it), и вы должны получить квадратные уравнения для e ^ (it)
что вы можете решить для использования квадратной формулы, а затем решить для т. Это даст вам точное решение. Этот метод фактически скажет вам точно, существует ли решение, существует два или одно существует в зависимости от того, сколько точек из квадратичного метода являются действительными.
Используйте метод Ньютона для решения для t, этот метод не является точным, но его вычислительно гораздо легче понять, и он будет очень хорошо работать в этом случае.