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

Программирование на Юнити.

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

Сообщение AlexandrBuryakov 18 авг 2019, 14:09

Здравствуйте.
Есть две сферы в позициях (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:
Спасибо. ^:)^

Однако в целом, может быть будет достаточно и решения на первый вариант (когда рассчитывается движение строго в центр другой сферы. Ещё интересно как считать тогда, если их одновременно навстречу друг другу двигать.
AlexandrBuryakov
UNIт
 
Сообщения: 59
Зарегистрирован: 26 янв 2019, 14:36

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

Сообщение alew 19 авг 2019, 21:26

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

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

Сообщение seaman 19 авг 2019, 21:38

Собственно - а прикрепить ее как дочернюю не пойдет?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение AlcogGMS 20 авг 2019, 11:12

Синтаксис:
Используется csharp

Vector3 ray = posMain - posSecond;

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

 
AlcogGMS
UNIт
 
Сообщения: 50
Зарегистрирован: 11 янв 2019, 21:57


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14