1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 2

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

10.02.2025, 22:29. Показов 8718. Ответов 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
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,745
Записей в блоге: 14
27.02.2025, 15:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Igor3D Посмотреть сообщение
Напротив, мне было бы очень интересно увидеть "другой путь", но увы - пока не наблюдаю никаких.
- увидеть "другой путь" очень трудно. В любом случае, это Ваша проблема, а не моя. А Вы перекладываете ее на собеседников.

Цитата Сообщение от Igor3D Посмотреть сообщение
Эти же формулы используются для поворота 3D векторов/координат.
- преобразование 3D-векторов задаются матрицами 3x3.
0
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 2
28.02.2025, 21:19  [ТС]
Кстати, не желаете продолжить объяснение? (вот видите, перекладывает свои проблемы на собеседников )
Цитата Сообщение от Igor3D Посмотреть сообщение
На практике обычно мы имеем не пару векторов, а только один, напр x который нужно повернуть вокруг заданной (вектором) оси. В этом случае ...
0
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
28.02.2025, 22:42
Цитата Сообщение от Igor3D Посмотреть сообщение
На практике обычно мы имеем не пару векторов, а только один
Если вектор один, то умножаем его на матрицу поворота. Если векторов несколько, то выполняем это для каждого вектора.
0
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 2
28.02.2025, 23:38  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если вектор один, то умножаем его на матрицу поворота. Если векторов несколько, то выполняем это для каждого вектора.
С матрицей тут конфуз получился. Я назвал тему просто "Объясните формулы", остальное добавил модератор. Ничего страшного, выражение "на плоскости" остается верным, никто не обещал что это плоскость XY. А вот матрицы нет, та 2х2 что для скаляров не годится для векторов. Ну и умножение на матрицу - формальное решение, используется что залито в матрицу
0
5524 / 2877 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
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
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,745
Записей в блоге: 14
01.03.2025, 12:52
u235, в практике - да, согласен.
0
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 2
01.03.2025, 13:17  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Чаще всего для..
Чтение книг сразу чувствуется, все очень грамотно (в хорошем смысле). Но вот решать задачки книжники обычно не спешат. Давайте все-таки дожмем и покажем как вращать 3D вектор с помощью этих формул. А то
Хмм... два "ортогональных" (перпендикулярных) вектора - а где я их возьму? Мне-то нужно повернуть заданный вектор вокруг заданной оси. Нет, эти формулы - какой-то неправильный, корявый способ. Нужно юзать матрицу поворота как все делают!
Развейте эти сомнения
0
59 / 59 / 4
Регистрация: 10.06.2023
Сообщений: 930
01.03.2025, 14:08
Если возникла конкретная задача: "нужно повернуть заданный вектор вокруг заданной оси". То ее решение легко построить.
Направление вектора "ось" принимаем за ось z. Перпендикулярную плоскость считаем плоскостью (x.y) Проекция вращаемого вектора на плоскость направим по назначенной оси x. Дальше просто.
1
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 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
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
02.03.2025, 17:42
Цитата Сообщение от Igor3D Посмотреть сообщение
Эти же формулы используются для поворота 3D векторов/координат
В этих формулах нет z. Точно можно использовать эти же формулы?

Цитата Сообщение от Igor3D Посмотреть сообщение
В этом случае x и y не числа(скаляры), а ортогональные 3D вектора равной длины
Каким образом, умножая длину на число (косинус угла), можно получить 3D вектор?
0
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 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
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
03.03.2025, 00:09
Цитата Сообщение от Igor3D Посмотреть сообщение
А нигде не утверждалось что x и y обязательно длины (скаляры)
Мы умножаем длину r на косинус и получаем x.
Поэтому вопрос: Каким образом, умножая длину на число (косинус угла), можно получить 3D вектор?

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

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

Интересно наблюдать как срабатывает "рефлекс". Ага, поворот - значит матрица! А вот и нет, данные формулы позволяют вращать "без всяких матриц". Ну и опять: само по себе "матрица" ровным счетом ничего не объясняет, ведь матрица - это "откомпилированный" результат содержательного решения. Напр из данных формул можно получить матрицу 3х3 (хотя сделать это "руками" утомительно)
0
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
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
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 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
59 / 59 / 4
Регистрация: 10.06.2023
Сообщений: 930
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
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 2
04.03.2025, 16:28  [ТС]
Цитата Сообщение от VAF34 Посмотреть сообщение
проекция его на первый вектор постоянна:
На один из векторов, необязательно первый. И следует подробно объяснить почему
Цитата Сообщение от VAF34 Посмотреть сообщение
Считайте!
Ага, подставить человека под тонну алгебры - это так благородно А здесь еще и неправильно, народная мудрость говорит: не связывайся с длиной/квадратом. Это преобразование/решение НЕлинейно и матрицей не выражается. А матрица вращения точно есть
0
59 / 59 / 4
Регистрация: 10.06.2023
Сообщений: 930
04.03.2025, 20:00
постоянство проекции при постоянстве длины это и есть условие того, что второй вектор может только вращаться вокруг первого.
Если пришлете программу или кусок программы, в который надо вставить вращение вектора вокруг заданного, то я могу помочь. Разговор о матрицах тербует некоторого уровня знаний, но, обладая разумом, без него можно почти всегда обойтись
0
1974 / 830 / 115
Регистрация: 01.10.2012
Сообщений: 5,031
Записей в блоге: 2
04.03.2025, 21:41  [ТС]
Цитата Сообщение от VAF34 Посмотреть сообщение
Если пришлете программу или кусок программы, в который надо вставить вращение вектора вокруг заданного, то я могу помочь.
Нет необходимости что-то присылать. Просто напишите ф-цию принимающую 2 аргумента: ось поворота и поворачиваемый вектор, и возвращающую повёрнутый вектор. Используйте удобный Вам язык и структуры данных, напр для векторов и стандартных операций.

Не по теме:

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

0
5524 / 2877 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru