Страница 1 из 1

Смещение движения для дистанцирования

СообщениеДобавлено: 18 авг 2019, 14:09
AlexandrBuryakov
Здравствуйте.
Есть две сферы в позициях (0, 0, 0) и ( 4, 0, 0 ) соответственно.
Вторая сфера смещается со своей позиции на (-1, 0, 0). И оказывается в позиции (3, 0, 0).
Как вычислить смещение по Y и Z так, что бы дистанция между объектами сохранилась прежней и было перпендикулярно направлению движения? Даже скорее так, как вычислить смещение на край окружности внутрь которой попали?
Изображение

Что бы условия были более понятны второй пример (Однако возможно этот вариант не понадобиться вообще):
Вторая сфера смещается со своей позиции на (-1, -1, -1). И оказывается в позиции (3, -1, -1).
Как вычислить смещение перпендикулярное направлению движения так, что бы дистанция между объектами сохранилась прежней и было по кротчайшему пути ( но перпендикулярно направлению движения )?
Изображение
Изображение

Во втором примере получается примерно так, новая позиция (3, -1, -1). После смещения примерно (3.563047, -1.197493, -1.366025). Двигал руками. :ymhug:
Спасибо. ^:)^

Однако в целом, может быть будет достаточно и решения на первый вариант (когда рассчитывается движение строго в центр другой сферы. Ещё интересно как считать тогда, если их одновременно навстречу друг другу двигать.

Re: Смещение движения для дистанцирования

СообщениеДобавлено: 19 авг 2019, 21:26
alew
Не понятно в какой момент надо вычислять смещение. И какая сфера основная, а какая ведомая. И "сохранилась прежней и было перпендикулярно направлению движения? Даже скорее так, как вычислить смещение на край окружности" - просто повернуть на нужный угол c учетом расстояния?

Re: Смещение движения для дистанцирования

СообщениеДобавлено: 19 авг 2019, 21:38
seaman
Собственно - а прикрепить ее как дочернюю не пойдет?

Re: Смещение движения для дистанцирования

СообщениеДобавлено: 20 авг 2019, 11:12
AlcogGMS
Синтаксис:
Используется csharp

Vector3 ray = posMain - posSecond;

if(Length(ray) < radius){
    Vector3 dir = ray.normalized;
    posSecond = posMain  + (dir * radius);
}