Определить две сферы с центрами в позиционных векторах a и b (т.е. a = a x i + a y j + a z k ).
Определение вектора c от центра сферы A к центру сферы B:
c = b - a
Его длина составляет| с |= | b - a |= sqrt ([b x - a x ] 2 + [b y - a y ] 2 + [b z - a z ] 2 )
Как сказал Махеш, расстояние между двумя сферамиэто:
| d |= | c |- r A - r B
Таким образом, вектор d от самой дальней точки сферы A до самой дальней точки B будет либоуказывая вдоль c (когда сферы еще не пересекаются) или в противоположном направлении (когда сфера пересекается).
Чтобы переместить одну сферу, чтобы она не пересекалась, вам нужно переместить ее на d .Поскольку это c , мы можем просто умножить c на коэффициент, чтобы получить компоненты d :
f = (| d | / | c |) d = f * c
Например, в направлении x:
d x = f * c x
Итак, я бы сказал, попробуйте следующее:
- Вычислите компоненты смещения c из векторов положения A и B.
- Вычислить длину c из его составляющих
- Вычислить длину d из длины c и радиусов
- Вычислить коэффициент f между c и d
- Вычислить компоненты d путем масштабирования компонентов c по коэффициенту f.
Вы можете проверить, пересекаются ли сферы, проверив знак f: если он отрицательный, то сферы пересекаются.Затем вы можете либо переместить A или B на d , либо на обе части на d , чтобы они больше не пересекались.