Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2

Объясните формулы "матрица вращения на плоскости"

10.02.2025, 22:29. Показов 7985. Ответов 109
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости".

x' = x * cos(a) - y * sin(a)
y' = y * cos(a) + x * sin(a)

Как бы Вы их объяснили первокурсникам? Желательно "под запись", т.е. что должно быть у детей в конспектах?

Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2025, 22:29
Ответы с готовыми решениями:

Угловая скорость вращения тела на плоскости
Добрый день! У меня простая задача, просто хочу уточнить, правильно ли я понимаю решение. Есть вращение диска на плоскости вокруг своей...

Поверхность вращения. Построение двумерного графика в 3д плоскости.
Задание:отобразить в левой системе координат поверхность вращения вокруг оси OZ кривой z=4/x^2 при y=0. У меня проблема с построением...

Матрица вращения
Здравствуйте! Я совсем молодой пользователь МатЛаба. Возникла проблема с решением задачи в матлабе. Нужно используя ротационную...

109
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
27.02.2025, 15:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Igor3D Посмотреть сообщение
Напротив, мне было бы очень интересно увидеть "другой путь", но увы - пока не наблюдаю никаких.
- увидеть "другой путь" очень трудно. В любом случае, это Ваша проблема, а не моя. А Вы перекладываете ее на собеседников.

Цитата Сообщение от Igor3D Посмотреть сообщение
Эти же формулы используются для поворота 3D векторов/координат.
- преобразование 3D-векторов задаются матрицами 3x3.
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
28.02.2025, 21:19  [ТС]
Кстати, не желаете продолжить объяснение? (вот видите, перекладывает свои проблемы на собеседников )
Цитата Сообщение от Igor3D Посмотреть сообщение
На практике обычно мы имеем не пару векторов, а только один, напр x который нужно повернуть вокруг заданной (вектором) оси. В этом случае ...
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
28.02.2025, 22:42
Цитата Сообщение от Igor3D Посмотреть сообщение
На практике обычно мы имеем не пару векторов, а только один
Если вектор один, то умножаем его на матрицу поворота. Если векторов несколько, то выполняем это для каждого вектора.
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
28.02.2025, 23:38  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если вектор один, то умножаем его на матрицу поворота. Если векторов несколько, то выполняем это для каждого вектора.
С матрицей тут конфуз получился. Я назвал тему просто "Объясните формулы", остальное добавил модератор. Ничего страшного, выражение "на плоскости" остается верным, никто не обещал что это плоскость XY. А вот матрицы нет, та 2х2 что для скаляров не годится для векторов. Ну и умножение на матрицу - формальное решение, используется что залито в матрицу
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
01.03.2025, 12:17
Цитата Сообщение от Catstail Посмотреть сообщение
- преобразование 3D-векторов задаются матрицами 3x3.
Чаще всего для линейного преобразования 3D-векторов используют т.н. однородные координаты, при этом используют матрицы 4x4 (в 3D и 3x3 в 2D).
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если векторов несколько, то выполняем это для каждого вектора.
Это вопрос терминалогии. Можно из исходных n векторов сформировать матрицу nx3, умножить эту матрицу на матрицу преобразования 3x3 и получить новую матрицу nx3, состоящуюю из векторов после преобразования.
Кстати, поворот вектора на комплексной плоскости вокруг начала координат это просто умножение его на комплексное число cos(a)+j*sin(a).
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
01.03.2025, 12:52
u235, в практике - да, согласен.
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
01.03.2025, 13:17  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Чаще всего для..
Чтение книг сразу чувствуется, все очень грамотно (в хорошем смысле). Но вот решать задачки книжники обычно не спешат. Давайте все-таки дожмем и покажем как вращать 3D вектор с помощью этих формул. А то
Хмм... два "ортогональных" (перпендикулярных) вектора - а где я их возьму? Мне-то нужно повернуть заданный вектор вокруг заданной оси. Нет, эти формулы - какой-то неправильный, корявый способ. Нужно юзать матрицу поворота как все делают!
Развейте эти сомнения
0
52 / 53 / 2
Регистрация: 10.06.2023
Сообщений: 730
01.03.2025, 14:08
Если возникла конкретная задача: "нужно повернуть заданный вектор вокруг заданной оси". То ее решение легко построить.
Направление вектора "ось" принимаем за ось z. Перпендикулярную плоскость считаем плоскостью (x.y) Проекция вращаемого вектора на плоскость направим по назначенной оси x. Дальше просто.
1
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
02.03.2025, 15:51  [ТС]
Цитата Сообщение от VAF34 Посмотреть сообщение
Направление вектора "ось" принимаем за ось z. Перпендикулярную плоскость считаем плоскостью (x.y) Проекция вращаемого вектора на плоскость направим по назначенной оси x. Дальше просто.
Вероятная реакция
Какая-то "проекция" которую надо куда-то "направлять"... Ни фига не понял. И что "просто"? Скажите, что нам записывать?
И это еще хороший студент который честно пытается понять (ненадолго). Это ведь одна из первых лекций для тех кто учится всего несколько недель. Вероятно понятия алгебры векторов и скалярное/векторное произведение были даны на предыдущей лекции (если он ее посещал). Хорошо если помнит формулы, но никакого практического опыта решения задач у него точно нет. Короче, как часто говорят
Вы можете нормально объяснить, а не выёживаться?
Вот мое объяснение, продолжите его, или, еще лучше, предложите свое. У человека с минимальной подготовкой должен быть такой конспект чтобы сдать экзамен. Нормальный все поймет и сдаст на "отлично", тупой - что-то запомнит и до троечки доползет
Кликните здесь для просмотра всего текста
1.
x' = x * cos(a) - y * sin(a)
y' = x * sin(a) + y * cos(a)

Эти формулы могут быть использованы для поворота 2D вектора/координаты (x, y) вокруг точки (0, 0) на угол a. Положительный угол соответствует вращению против часовой стрелки. Говорят также CCW (CounterColckWise)

2. Доказательство/обоснование. Данные формулы легко получаются из тригонометрических для суммы углов

cos(a + b) = cos(a) * cos(b) - sin(a) * sin(b)
sin(a + b) = cos(a) * sin(b) + sin(a) * cos(b)

В равенствах умножим обе части на r - длину вектора (x, y) и заменим параметрические координаты на декартовы

x = r * cos(b)
y = r * sin(b)

x' = r * cos(a + b)
y' = r * sin(a + b)

3. Данные формулы часто записываются в виде матриц
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}cos(a)& -sin(a)\\sin(a) & cos(a)\end{pmatrix}
Важно: данная запись в нотации "column major" широко используемой во многих приложениях, напр OpenGL. Матрица применяется "слева", т.е. строка матрицы множится на вектор-столбец (трансформируемой) координаты

4. Эти же формулы используются для поворота 3D векторов/координат. В этом случае x и y не числа(скаляры), а ортогональные 3D вектора равной длины (но необязательно единичной). Результатом будет поворот этих векторов вокруг оси проходящей через начало координат (0, 0, 0) в направлении z = cross(x, y)

На практике обычно мы имеем не пару векторов, а только один, напр x который нужно повернуть вокруг заданной (вектором) оси. В этом случае ...
Кстати формулировка объяснения (неожиданно) оказалась весьма увлекательным занятием . Легко "налить воды", а вот написать кратко но полно..
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
02.03.2025, 17:42
Цитата Сообщение от Igor3D Посмотреть сообщение
Эти же формулы используются для поворота 3D векторов/координат
В этих формулах нет z. Точно можно использовать эти же формулы?

Цитата Сообщение от Igor3D Посмотреть сообщение
В этом случае x и y не числа(скаляры), а ортогональные 3D вектора равной длины
Каким образом, умножая длину на число (косинус угла), можно получить 3D вектор?
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
02.03.2025, 18:43  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
В этих формулах нет z. Точно можно использовать эти же формулы?
Точно. Ведь 2D вектор - частный случай 3D вектора. Исходные формулы соответствуют повороту в плоскости XY вокруг оси Z. Но формулы можно записать и для других плоскостей

y' = y * cos(a) - z * sin(a) // поворот в плоскости YZ вокруг оси X
z' = z * cos(a) + y * sin(a)

z' = z * cos(a) - x * sin(a) // поворот в плоскости ZX вокруг оси Y
x' = x * cos(a) + z * sin(a)

Цитата Сообщение от Shamil1 Посмотреть сообщение
Каким образом, умножая длину на число (косинус угла),
А нигде не утверждалось что x и y обязательно длины (скаляры)
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
03.03.2025, 00:09
Цитата Сообщение от Igor3D Посмотреть сообщение
А нигде не утверждалось что x и y обязательно длины (скаляры)
Мы умножаем длину r на косинус и получаем x.
Поэтому вопрос: Каким образом, умножая длину на число (косинус угла), можно получить 3D вектор?

Цитата Сообщение от Igor3D Посмотреть сообщение
поворот в плоскости YZ вокруг оси X
А поворот вокруг произвольной оси? Ожидаю увидеть матрицу 3на3. Раз уж Вы завели речь о 3D векторах.
Или хотя бы что-нибудь про композицию трёх поворотов. Это ведь одна из первых лекций для тех кто учится всего несколько недель.
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
03.03.2025, 13:04  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Мы умножаем длину r на косинус и получаем x.
Поэтому вопрос: Каким образом, умножая длину на число (косинус угла), можно получить 3D вектор?
Умножение (знаковой) длины - это подробности доказательства для плоского случая. Доказательство для 3D случая - не стоит его здесь размазывать, достаточно что "это работает". Актуально "как юзать".

Цитата Сообщение от Shamil1 Посмотреть сообщение
А поворот вокруг произвольной оси? Ожидаю увидеть матрицу 3на3. Раз уж Вы завели речь о 3D векторах. Или хотя бы что-нибудь про композицию трёх поворотов. Это ведь одна из первых лекций для тех кто учится всего несколько недель.
К сожалению, про композицию мне в ВУЗе ничего не говорили, и потом мне пришлось набить немало шишек.

Интересно наблюдать как срабатывает "рефлекс". Ага, поворот - значит матрица! А вот и нет, данные формулы позволяют вращать "без всяких матриц". Ну и опять: само по себе "матрица" ровным счетом ничего не объясняет, ведь матрица - это "откомпилированный" результат содержательного решения. Напр из данных формул можно получить матрицу 3х3 (хотя сделать это "руками" утомительно)
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
03.03.2025, 16:45
Цитата Сообщение от Igor3D Посмотреть сообщение
4. Эти же формулы используются для поворота 3D векторов/координат. В этом случае x и y не числа(скаляры), а ортогональные 3D вектора равной длины (но необязательно единичной). Результатом будет поворот этих векторов вокруг оси проходящей через начало координат (0, 0, 0) в направлении z = cross(x, y)
Первое и последнее предложение при первом прочтении не связались друг с другом. В первом говорится о повороте 3D, а в последнем уточняется, что речь идёт о частном случае - вращении вокруг оси Z.

Было бы понятнее, если это объединить в одно предложение:
"Эти же формулы используются для поворота 3D векторов/координат вокруг оси Z"

Второе предложение (про "ортогональные 3D вектора равной длины") вообще не могу понять.

Цитата Сообщение от Igor3D Посмотреть сообщение
На практике обычно мы имеем не пару векторов, а только один
Это тоже не могу понять, так как все предыдущие формулы приведены для одного вектора.

Цитата Сообщение от Igor3D Посмотреть сообщение
Умножение (знаковой) длины
Длина бывает знаковая? Где встречается такая в приведённых формулах?

Цитата Сообщение от Igor3D Посмотреть сообщение
Ага, поворот - значит матрица! А вот и нет, данные формулы позволяют вращать "без всяких матриц".
Очевидно, что матрица - это компактный способ записи преобразования для вектора, и вместо матрицы можно использовать N формул (для каждой координаты).
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
03.03.2025, 18:50  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Первое и последнее ..
Речь идет о повороте пары взаимо-перпендикулярных 3D векторов вокруг произвольной оси, 3D вектор которой (нормаль к плоскости векторов/вращения) вовсе не обязан совпадать с какой-то осью координат. Называем этот вектор z, по аналогии с x и y, др словами теперь у нас все вектора (кроме sin/cos)

Пара (2 вектора) исходных необходима для расчета, но часто дан один и пересчитать нужно его. Можно "назначить" данный вектор x и, используя известную ось z, посчитать y или наоборот, считать x от y. Результат и расчеты получаются одинаковы, это еще предстоит объяснить.

Длина почти всегда знаковая, напр скаляры x и y.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Очевидно, что матрица - это компактный способ записи преобразования для вектора, и вместо матрицы можно использовать N формул (для каждой координаты).
Само преобразование мало о чем говорит
x' = a * x + b * y + c * z
Откуда взялись (a, b, c) что сидят в матрице? Никакой информации об этом уже нет, восстановить логику решения из/по матрице обычно невозможно. "Достоинства есть продолжения недостатков".

Да, и я упустил одну важную деталь при использовании этих формул для векторов. Ну "еще не вечер"
0
52 / 53 / 2
Регистрация: 10.06.2023
Сообщений: 730
04.03.2025, 09:39
Вектор, относительно которого вращается второй вектор описывается тремя его проекциями на оси заданной неменяющейся системы координат ( x(t), y(t), z(t)). Изменение координат по времен может описывать как вращение вектора, так и изменение его длины. Второй вектор ( x1(t), y1(t), z1(t)).
Уравнения, описывающие его вращение вокруг первогj:
1) постоянство его длины x1(t)**2+y1(t)**2+z1(t)**2=V1 const
2) проекция его на первый вектор постоянна:
x1(t)*x(t)+y1(t)*y(t)+z1(t)*z(t)=x1(0)*x (0)+y1(0)*y(0)+z1(0)*z(0) - это число
Выразим из первого, на пример, x1(t), из второго, на пример, y1(t), мы получаем уравнение для изменения z1(t) с вравой частью, содержащей только параметры движения первого вектора. Считайте!
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
04.03.2025, 16:28  [ТС]
Цитата Сообщение от VAF34 Посмотреть сообщение
проекция его на первый вектор постоянна:
На один из векторов, необязательно первый. И следует подробно объяснить почему
Цитата Сообщение от VAF34 Посмотреть сообщение
Считайте!
Ага, подставить человека под тонну алгебры - это так благородно А здесь еще и неправильно, народная мудрость говорит: не связывайся с длиной/квадратом. Это преобразование/решение НЕлинейно и матрицей не выражается. А матрица вращения точно есть
0
52 / 53 / 2
Регистрация: 10.06.2023
Сообщений: 730
04.03.2025, 20:00
постоянство проекции при постоянстве длины это и есть условие того, что второй вектор может только вращаться вокруг первого.
Если пришлете программу или кусок программы, в который надо вставить вращение вектора вокруг заданного, то я могу помочь. Разговор о матрицах тербует некоторого уровня знаний, но, обладая разумом, без него можно почти всегда обойтись
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,758
Записей в блоге: 2
04.03.2025, 21:41  [ТС]
Цитата Сообщение от VAF34 Посмотреть сообщение
Если пришлете программу или кусок программы, в который надо вставить вращение вектора вокруг заданного, то я могу помочь.
Нет необходимости что-то присылать. Просто напишите ф-цию принимающую 2 аргумента: ось поворота и поворачиваемый вектор, и возвращающую повёрнутый вектор. Используйте удобный Вам язык и структуры данных, напр для векторов и стандартных операций.

Не по теме:

Не все пишут/постят в надежде получить помощь :)

0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
04.03.2025, 21:48
Цитата Сообщение от Igor3D Посмотреть сообщение
Просто напишите ф-цию принимающую 2 аргумента
А про величину угла поворота забыли?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.03.2025, 21:48
Помогаю со студенческими работами здесь

Матрица вращения
Нужно чтобы вместо Х вращалась буква П. Вот сам код uses crt,graph; const minXm=-100;maxXm=2000; minYm=2000; maxYm=-100; ...

Матрица вращения (X->Y->Z)
Добрый день. Подскажите как составить матрицу вращения, если знаю координаты вектора в начальном и конечном положении.

Метод косоугольного вращения. Матрица поворота
Доброго времени суток. В факторном анализе в статистике есть метод косоугольное вращение. Пишу программу для его реализации и не могу...

Матрица вращения облака точек вида x,y,z
Добрый день господа сочувствующие! Никто не подскажет способ и функционал для матрицы вращения облака точек вида x,y,z. Проще выражаясь...

В какой момент времени после начала вращения платформы груз начнет соскальзывать, объясните как решать
Здравия, соратники! Разъясните,пожалуйста, как решать задачу Google не помог На краю вращающейся платформы радиуса R=1,0 м лежит груз. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru