Найти смещение с учётом поворота

Общие вопросы о Unity3D

Найти смещение с учётом поворота

Сообщение virt 24 ноя 2013, 13:10

Всем привет!

я с 3D никогда не работал, но программирую профессионально, видимо самый большой пробел у меня в математике, взгляните на картинку:
Изображение

Путь - например ломаная или сплайн (в данном случае не важно)
Начальная точка - нулевая точка с которой начинается построение пути
Конечная точка - последняя точка в пути
Произвольная точка пути - любая точка на пути, для которой я могу получить Vector3 (позиция) и Quaternion (поворот)

Вопрос в том как получить точку справа и точку слева, на заданном удалении (от произвольной точки пути)?
Позиция и поворот - известны!

Подозреваю что решается просто, но лично я в затупках ...
virt
UNец
 
Сообщения: 6
Зарегистрирован: 24 ноя 2013, 12:40

Re: Найти смещение с учётом поворота

Сообщение seaman 24 ноя 2013, 13:13

Если не в математике, а в Юнити, то:
Синтаксис:
Используется csharp
Vector3 left = transform.position + transform.left * distance;
Vector3 right = transform.position + transform.right  * distance;
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Найти смещение с учётом поворота

Сообщение virt 24 ноя 2013, 13:57

seaman писал(а):Если не в математике, а в Юнити, то:
Синтаксис:
Используется csharp
Vector3 left = transform.position + transform.left * distance;
Vector3 right = transform.position + transform.right  * distance;


Спасибо за отклик

В вашем примере не учитывается кватернион (поворот), а также вы ввели переменную Transform, в моём случае Transform отсутствует (считайте что GameObject - отсутствует).

Напомню что в моём случае известны 2 величины (типы):
1) Vector3 (позиция)
2) Quaternion (поворот)

P.S. Вообще мне нужно в цикле получить эти координаты для конкретных смещений на сплайне, так что GameObject тут нет ...
virt
UNец
 
Сообщения: 6
Зарегистрирован: 24 ноя 2013, 12:40

Re: Найти смещение с учётом поворота

Сообщение IDoNotExist 24 ноя 2013, 14:20

Синтаксис:
Используется csharp
Vector3 myPos = Vector3.zero;
Quaternion myRot = Quaternion.identity;

Vecto3 left = myPos + myRot*Vector3.left * distance;
Vecto3 right = myPos + myRot*Vector3.right * distance;
 
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Найти смещение с учётом поворота

Сообщение virt 24 ноя 2013, 17:42

IDoNotExist писал(а):
Синтаксис:
Используется csharp
Vector3 myPos = Vector3.zero;
Quaternion myRot = Quaternion.identity;

Vecto3 left = myPos + myRot*Vector3.left * distance;
Vecto3 right = myPos + myRot*Vector3.right * distance;
 


К сожалению этот код у меня не работает :(

я сделал так:
Синтаксис:
Используется csharp
//pt - оригинальная координата Vector3
//rotation - кватернион поворота точки pt
Vector3 right = pt + rotation * Vector3.right * 150F;


Получаю следующее:
pt.x=1.565899, pt.y=0.325028, right.x=1.565228, right.y=0.3241339

как бы я не менял значение дистанции всё равно получается исходная координата
визуально это тот же самый путь без отступа
virt
UNец
 
Сообщения: 6
Зарегистрирован: 24 ноя 2013, 12:40

Re: Найти смещение с учётом поворота

Сообщение virt 24 ноя 2013, 19:04

Кое что прояснилось, вот так отступ появился:

Синтаксис:
Используется csharp
Vector3 right = pt + rotation * Vector3.down * 0.2F;

но теперь другая проблема, т.к. сам путь является GameObject, то повернув его, получаем следующую картинку:

Изображение
virt
UNец
 
Сообщения: 6
Зарегистрирован: 24 ноя 2013, 12:40

Re: Найти смещение с учётом поворота

Сообщение virt 01 дек 2013, 13:56

Всем дорбрый день!

Времени не было, но сейчас я вернулся к задаче и как мне кажется я понял причину такого поведения расчётной функции:
Синтаксис:
Используется csharp
Vector3 right = pt + rotation * Vector3.down * 0.2F;


Мне кажется проблема в том что за основу берётся Vector3.down, т.е. некая константа, которая всегда направлена в низ. Но ведь мне нужно в качестве низа, права или лева - брать относительную величину.

Поясню
Произвольная точка на сплайне имеет свою координату и поворот, соответственно с учётом поворота, нужно рассчитать вектор право или лево, и его то и подставить в функцию

Вопрос:
Как имея Vector3 и Quaternion, найти Vector3 направленный например в право?
virt
UNец
 
Сообщения: 6
Зарегистрирован: 24 ноя 2013, 12:40


Вернуться в Общие вопросы

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

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