У меня возникли проблемы с пониманием Math.tan() и Math.atan() и Math.atan2() .
У меня есть базовые знания по тригонометрии, но использование SIN, COS, TAN и т. Д. Для разработки игр является для меня совсем новым.
Я читаю некоторые учебные пособия и вижу, что, используя тангенс, мы можем получить угол, на который нужно повернуть один объект, на сколько на него обращено другое лицо, например, моя мышь. Так почему же нам все еще нужно использовать atan или atan2?
Касательная формула такова:
Обратитесь к этому рисунку:
Где a соседняя сторона, o это противоположная сторона и theta это угол. Аналогично, синус и косинус — это sin (ang) = o / h, а cos (ang) = a / h где h длинная сторона: http://www.mathwords.com/s/sohcahtoa.htm
Между тем atan (сокращение от арктангенса , также известного как обратный тангенс ) является обратным tan , примерно так:
Таким образом, если вы знаете значения как противоположных, так и соседних сторон (например, вычитая координаты объекта из координат мыши), вы можете получить значение угла с помощью atan .
Однако в разработке игр может случиться так, что соседняя сторона равна 0 (например, координата x вектора равна 0). Помните, что tan(angle) = opposite/adjacent вероятность катастрофической ошибки деления на ноль должна быть очевидной. Так много библиотек предлагают функцию с именем atan2 , которая позволяет определить как x и y параметры, чтобы избежать деления на ноль для вас и дать угол в правом квадранте.
(диаграмма любезно предоставлена Гаретом, пожалуйста, проголосуйте и за его ответ)
Использование тригонометрии в разработке игр довольно распространено, особенно с векторами, но обычно библиотеки скрывают работу тригонометрии для вас. Вы можете использовать sin / cos / tan для множества задач, которые включают геометрические манипуляции, чтобы найти значение из треугольника. Все, что вам нужно, это 3 значения (длина стороны / угловые значения), чтобы найти другие значения прямоугольного треугольника, так что это весьма полезно.
Вы даже можете использовать «циклическую» природу функций синуса и косинуса для особого поведения в игре, например, я видел, как cos / sin много использовал, чтобы объект поворачивался вокруг другого.
Видео:Угол между векторами. 9 класс.Скачать
Угол X между двумя 3D векторами?
У меня есть два 3D-вектора, называемые A и B, которые имеют только 3D-позицию. Я знаю, как найти угол вдоль единичной окружности в диапазоне от 0-360 градусов с помощью функции atan2 делать:
EDIT: (моя функция atan2 не имела смысла, теперь она должна найти «угол y» между 2 векторами):
но это дает мне угол Y между 2 векторами. Мне нужно найти угол X между ними. Это связано с использованием значений позиций x, y и Z. Не x и z только, потому что это дает угол y между двумя векторами. Мне нужен угол X, я знаю, это звучит неопределенно, но я не знаю, как объяснить. Возможно, например, у вас есть камера в 3D-пространстве, если вы смотрите вверх или вниз, чем вращаете ось x. Но теперь мне нужно получить угол «вверх / вниз» между 2 векторами. Если я поверну эту 3D-камеру вдоль оси y, ось x не изменится. Таким образом, с 2 векторами, независимо от того, какой «угол y» находится между ними, угол x между 2 векторами останется неизменным, если угол y изменяется, потому что это угол» вверх/вниз», как в Камаре.
пожалуйста, помогите? Мне просто нужна строка math / pseudocode или объяснение. 🙂
Видео:Угол между векторами | МатематикаСкачать
3 ответов
Видео:Урок 3. Произведение векторов и загадочный угол между векторами. Высшая математика | TutorOnlineСкачать
вычисление угла высоты
хорошо, возможно, я наконец понял ваш комментарий ниже о том, что результат не зависит от y угол, и о том, как он относится к двум направлениям. Кажется, вы не очень заинтересованы в два векторы и угол между эти два, но вместо этого вы заинтересованы в разность векторов и угол, который образуется против горизонтальной плоскости. В горизонтальная система координат (часто используется в астрономии), этот угол будет называться «высота» или «высота», в отличие от «Азимута», который вы вычисляете с помощью формулы в вашем (отредактированном) вопросе. «высота» тесно связана с «угол наклона» вашей камеры, тогда как «Азимут» относится к «сдвиг».
у нас все еще есть проблема 2D. Одной из координат 2D-вектора является y координата разности векторов. Другой координат длина вектора после проецирования на горизонтальную плоскость, т. е. sqrt(x*x + z*z) . Окончательное решение будет
порядок ( A — B В противоположность B — A ) был выбран таким образом, что «A выше B» дает положительный y и поэтому положительная высота, в соответствии с вашим комментарием ниже. Знаки минус в вычислении Азимута выше должны заменить + 180 в коде из вашего вопроса, за исключением того, что диапазон сейчас [-180, 180] вместо ваш [0, 360]. Просто чтобы дать вам альтернативу, выберите то, что вы предпочитаете. Фактически вы вычисляете Азимут B — A в любом случае. Тот факт, что вы используете другой порядок для этих двух углов, может быть несколько запутанным, поэтому подумайте, действительно ли это то, что вы хотите, или вы хотите изменить знак высоты или изменить Азимут на 180°.
Видео:11 класс, 5 урок, Угол между векторамиСкачать
ортогональные проекции
для справки, я включу мой первоначальный ответ ниже, для тех, кто на самом деле ищет угол поворота вокруг некоторой фиксированной оси x, способ, предложенный в исходном вопросе.
если это X угол вы упоминаете в своем вопросе действительно угол поворота вокруг x axis, как показывает пример камеры, тогда вы можете подумать об этом следующим образом: установите x координата до нуля, и вы получите 2D-векторы в y-z самолет. Вы можете подумайте об этом как об ортогональной проекции на указанную равнину. Теперь вы вернулись к 2D-проблеме и можете решить ее там.
лично я бы просто позвонил atan2 дважды, один раз для каждого вектора, и вычесть получившиеся углы:
на x=0 подразумевается в приведенной выше формуле просто потому, что я работаю только на y и z .
я не совсем понял логику вашего сингла atan2 позвоните пока, но то, что я должен думать это говорит о том, что я не хотел бы поддерживать его, по крайней мере, без хорошего объяснительного комментария.
надеюсь, я правильно понял ваш вопрос, и это то, что вы ищете.
причиной использования atan2 вместо arccos или arcsin является точность. arccos ведет себя очень плохо вблизи 0 градусов. Небольшие ошибки вычисления в аргументе приведут к непропорционально большим ошибкам в результате. у arcsin такая же проблема близка к 90 градусам.
Так же, как 2D-векторы, вы вычисляете их угол, решая cos их Скалярное Произведение
Вам не нужно Атан, вы всегда идете на точечный продукт, так как его фундаментальная операция векторов, а затем используете acos чтобы получить угол.
Видео:Нахождение угла между векторами через координаты. 9 класс.Скачать
Вычислить угол между двумя векторами (проблема разрыва atan2)
У меня есть два вектора, которые я хочу рассчитать угол между ними.
Один вектор определяется как две точки: P1(x1,y1) и P2(x2,y2) . Другой вектор определяется как точка P3(x3,y3) и угол его поворота относительно оси x (скажем, тета).
Я знаю, что мне нужно получить продукт из них, но как получить второй вектор с точки зрения двух точек?
На самом деле я пытался использовать atan2(), однако, когда угол вокруг pi (+-epsilon), он делает прыжки с pi на -pi, что нежелательно, и я не могу исправить его просто добавлением 2 * pi, когда угол меньше нуля. В этом случае моя симуляция переходит из +pi в -pi.
Я использую C-mex S-functions , но любой pseudocode будет в порядке.
Взял весь материал отсюда. Пожалуйста, прочитайте обсуждение там, чтобы понять эту тему.
Предполагая, что a = [x1, y1] и b = [x2, y2] — два вектора со своими основаниями в начале координат, неотрицательный угол между ними, измеренный против часовой стрелки от a до b, задается формулой
для реализации MATLAB mod может быть заменена на rem :
Величины x1 * y2-x2 * y1 и x1 * x2 + y1 * y2 являются соответственно синусом и косинусом угла против часовой стрелки от вектора a к вектору b, умноженным на произведение их норм, т.е. Их крест продукт и точечный продукт, ограниченный двумя размерами. Затем функция «atan2» дает угол между ними от -pi до +pi, а операция «mod» меняет это так, чтобы он варьировался от 0 до 2 * pi.
Пожалуйста, не используйте формулу, такую как theta = acos(dot(a,b)) так как она имеет проблемы с точностью около pi и -pi .
📺 Видео
18+ Математика без Ху!ни. Скалярное произведение векторов. Угол между векторами.Скачать
Как находить угол между векторамиСкачать
Геометрия 9 класс (Урок№18 - Угол между векторами. Скалярное произведение векторов.)Скачать
Задание 3 ЕГЭ профиль #121Скачать
9 класс, 17 урок, Угол между векторамиСкачать
105. Угол между векторамиСкачать
100 тренировочных задач #135 Угол между векторамиСкачать
Математика без Ху!ни. Угол между векторами, применение скалярного произведения.Скачать
Косинус угла между векторами. Коллинеарность векторовСкачать
Аналитическая геометрия, 2 урок, Скалярное произведениеСкачать
Скалярное произведение векторов. 9 класс.Скачать
ГЕОМЕТРИЯ 11 класс : Угол между векторами. Скалярное произведение векторовСкачать
найти угол между единичными векторамиСкачать
Выпуск №0001Скачать
Найти угол между векторами и площадь параллелограмма, построенного на этих векторахСкачать