Как узнать угол между двумя векторами unity

Угол Unity3D между векторами/направлениями на определенной оси

У меня есть два направления, и я пытаюсь вычислить угол на определенной оси. Объект, из которого производятся эти направления, не является статическим объектом, поэтому я изо всех сил пытаюсь разобраться в математике, чтобы выяснить, что мне нужно делать.

FYI, у меня есть начальная и конечная точки, которые я использовал для расчета направлений, если они необходимы.

Вот диаграмма, показывающая, что я ищу:

Как узнать угол между двумя векторами unity

Вышеприведенное изображение представлено сверху вниз в единстве и показывает угол, который я хочу.

Как узнать угол между двумя векторами unity

Проблема может быть видна из приведенного выше изображения, а именно, что направления не находятся на одной высоте, поэтому я не могу использовать функцию vector3.angle, поскольку она не даст мне правильного значения угла.

В сущности, я хочу знать, сколько мне придется поворачивать красную линию влево (вид сверху), чтобы она соответствовала синему (вид сверху).

Причина, по которой я нуждаюсь в этом, — это то, что я пытаюсь найти способ получить боковые стороны пальцев от моего датчика движения прыжка.

Он предоставит более конкретную информацию о проблеме, если вам это нужно, и у вас есть более конкретные скриншоты.

** ОБНОВЛЕНИЕ: после повторного чтения моего вопроса я вижу, что это не было особенно ясно, поэтому здесь я, надеюсь, сделаю это более ясным. Я пытаюсь вычислить угол пальца от данных отслеживания движения прыжка. В частности, угол пальца относительно пястной кости (кость сзади). Легкий способ продемонстрировать, что я имею в виду, — это переместить указательный палец бок о бок (т.е. В сторону большого пальца, а затем далеко от большого пальца).

Я надеюсь, что я приведу две диаграммы ниже. Как узнать угол между двумя векторами unity

Синяя линия следует за пяточной костью, которую ваш палец будет выстраиваться в положение покоя. То, что я хочу рассчитать, — это угол между синей и красной линиями (отмечен зеленой линией). Я не могу использовать Vector3.Angle, так как это значение также учитывает изгиб пальца. Мне нужно каким-то образом «сплющить» направление пальца, по сути игнорируя изгиб и просто глядя на угол сбоку. Вторая диаграмма, надеюсь, покажет, что я имею в виду.

Как узнать угол между двумя векторами unity

На этой диаграмме: синяя линия представляет собой фактическое направление пальца (взято из проксимальной кости — сустава к первому суставу). Зеленая линия представляет направление пяточной кости (направление, сравниваемое с). Красная линия представляет то, что я хотел бы «преобразуйте» синюю линию, сохраняя ее боковым углом (как видно на первой диаграмме).

Также стоит упомянуть, что я не могу просто всегда смотреть на оси x и z, так как эта рука будет вращаться.

Надеюсь, это поможет разобраться в этом и по-настоящему оценить помощь, полученную до сих пор.

Видео:Unity/C# Векторы, модуль, направлениеСкачать

Unity/C# Векторы, модуль, направление

Расчет фактического угла между двумя векторами в Unity3D

есть ли способ рассчитать фактический угол между двумя 3D-векторами в единстве? Метода Vector3.Угол дает самый короткий угол между двумя векторами. Я хочу знать фактический угол, рассчитанный по часовой стрелке.

Видео:Unity Как узнать угол между двумя объектамиСкачать

Unity Как узнать угол между двумя объектами

3 ответов

это должно быть то, что вам нужно. a и b являются векторами, для которых вы хотите рассчитать угол, n будет нормалью вашей плоскости, чтобы определить, что вы называете «по часовой стрелке / против часовой стрелки»

для простоты я использовать Vector3.Angle а затем вычислить знак от величины угла между плоскостью нормальной n и поперечное произведение (перпендикулярный вектор) a и b .

Это легко, если вы просто использовать сложение и вычитание. Посмотрите на это:

вот что я имею в виду: если мы по часовой стрелке и угол отрицательный, например -170 чтобы сделать его 180, вы используете это уравнение. «180-|угла|+180» вы уже знаете, что угол отрицательный, поэтому используйте «180 — (- angle)+180» и добавьте 180 «360 + angle». Тогда, если по часовой стрелке,дальше но если это против часовой стрелки, сделайте угол отрицательным, это потому, что другая часть угла 360 (это комплимент 360 + угол) — это «360 — (360 + угол)» или «360 — 360 — угол» или «(360 — 360) — угол» и, опять-таки, или «угол». Ну вот и все. ваш законченный угол.

попробуйте использовать Vector3.Angle(targetDir, forward);

Так как вы хотите самый короткий угол между ними, то, если возвращаемое значение больше 180 градусов, просто вычесть 360 градусов с этим значением.

Видео:Угол между векторами | МатематикаСкачать

Угол между векторами | Математика

DenTNT.trmw.ru

Видео:Unity C#. Quaternion Angle. Справочник. Мусин Михаил.Скачать

Unity C#. Quaternion Angle. Справочник. Мусин Михаил.

Записная книжка

Видео:Unity/C# Вектора: скалярное произведение и векторное произведение векторовСкачать

Unity/C# Вектора: скалярное произведение и векторное произведение векторов

Unity: Операции с векторами

В одном из проектов мне встретился такой код:

здесь transform.forward представлен как Vector3,
moveSpeed и Time.deltaTime — float
Т.е. тут идет умножение ненулевого ВЕКТОРА на число. Поскольку я учился на физмате, то сейчас у меня чуть не съехала крыша, когда я пытался вспомнить все то, что я знаю о векторах, ведь если вернутся к математике, формула выше решается так:

Произведение ненулевого вектора на число — это вектор, коллинеарный данному (сонаправленный данному, если число положительное, имеющий противоположное направление, если число отрицательное), а его модуль равен модулю данного вектора, умноженному на модуль числа. OnlineMSchool

К счастью, до того, как окончательно треснул мой череп, я успел понять, что Vector3 в Unity — это не совсем ВЕКТОР (отрезок, имеющий направление), здесь это прежде всего КООРДИНАТЫ x, y для Vector2 и x. y, z — для Vector3. Хотя наверное на вектор это похоже, т.к. начало его лежит в точке 0.
В документации Unity есть несколько статей про операции с векторами:
1. Понимание векторной арифметики
2. Направление и расстояние от одного объекта до другого
3. Вычисление нормали/перпендикуляра
4. Величина одного вектора, лежащая в направлении другого вектора

🎦 Видео

Unity C#. Vector3 Lerp. Справочник. Мусин Михаил.Скачать

Unity C#. Vector3 Lerp. Справочник. Мусин Михаил.

Векторы и Манипуляции с ними, Vector3 - Unity урокиСкачать

Векторы и Манипуляции с ними, Vector3 - Unity уроки

Вращение, углы Эйлера, Кватернионы в UnityСкачать

Вращение, углы Эйлера, Кватернионы в Unity

Unity C#. Vector3 Angle. Справочник. Мусин Михаил.Скачать

Unity C#. Vector3 Angle. Справочник. Мусин Михаил.

Вектора в Unity. Простое объяснение за 20 минут! Часть (1/2)Скачать

Вектора в Unity. Простое объяснение за 20 минут! Часть (1/2)

Как находить угол между векторамиСкачать

Как находить угол между векторами

Урок по Unity3D Дистанция между двумя объектамиСкачать

Урок по Unity3D Дистанция между двумя объектами

Угол между векторами. 9 класс.Скачать

Угол между векторами. 9 класс.

Демонстрация работы векторной математики в UnityСкачать

Демонстрация работы векторной математики в Unity

ВСЕ про Quaternions в Unity - вращение объектовСкачать

ВСЕ про Quaternions в Unity - вращение объектов

Поворот объекта через углы Эйлера и кватернионы в Unity 3DСкачать

Поворот объекта через углы Эйлера и кватернионы в Unity 3D

Unity Scripting API #2 - Класс Transform(позиция, угол поворота и масштаб объекта)Скачать

Unity Scripting API  #2  -  Класс  Transform(позиция, угол поворота  и масштаб  объекта)

Unity 18 C# Урок 5 - Векторы и Манипуляции с ними, Vector3Скачать

Unity 18 C# Урок 5 - Векторы и Манипуляции с ними, Vector3

Физика в Unity - 9. RaycastСкачать

Физика в Unity - 9. Raycast

Что такое Trigger и Collision | Взаимодействие объектов в UnityСкачать

Что такое Trigger и Collision | Взаимодействие объектов в Unity
Поделиться или сохранить к себе: