Elettracompany.com

Компьютерный справочник
147 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Матрица поворота matlab

ПОЛУЧЕНИЕ ТРАЕКТОРИИ ДВИЖЕНИЯ ТЕЛА ПРИ МОДЕЛИРОВАНИИ ПОВОРОТА В СРЕДЕ MATLAB

магистрант, институт нано- и микросистемной техники МИЭТ,

Для получения траектории поворачиваемого тела сначала необходимо разобраться как происходит поворот относительной какой-либо из оси вращения. Вращение тела вокруг любой из локальных осей x′, y′ или z′ выполняется с помощью следующей процедуры:

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

Математически это можно записать так:

  • [X*] — преобразованное тело,
  • [X] — исходное тело,
  • [Tr] – матрица перемещения,
  • [Rx] — соответствующая матрица поворота,
  • [Tr] -1 — матрица, обратная к матрице перемещения.

Рисунок 1. Отрисовка цилиндрического тела в среде Matlab.

На рисунке 1 отображено начальное состояние тела, также на рисунке выделены по 4 точки на каждой грани, которые отвечают за математические вычисления при повороте.

Рисунок 2. Поворот вокруг оси, параллельной одной из координатных осей

Рисунок 3. Поворот вокруг оси, параллельной одной из координатных осей

Рассмотрим точки, лежащие на цилиндре, изображенные на рисунке 1, заданные матрицей координат X относительно глобальной системы координат xyz.

X =

Повернем точки, лежащие на цилиндре на q = +45° относительно локальной оси X*, проходящей через центр координатной оси на расстоянии -22.85 по оси Z от пересечения осей XY.

Координаты данной оси начинаются в точке [xc yc zc 1] = [0 0 -17.7 1], а продолжаются параллельно оси X. Вращение осуществляется следующим образом: [X*] = [X][Tr][Rx][Tr] -1

TrX = = ,

Rx = =

TrX -1 = = .

Первая матрица [TrX] сдвигает точки параллельно плоскости

x = 0 до тех пор, пока ось y′ не совпадет с осью y. Вторая матрица [Rx] выполняет требуемое вращение вокруг оси y, третья матрица [Tr] -1 переносит ось y′, а следовательно, и повернутые точки, обратно в исходное положение.

Объединив эти три матрицы, получим

= .

После подстановки числовых значений преобразованные координаты примут вид:

X* =

Результат изображен на рисунках 2 и 3.

В зависимости от количества точек, которые будут описывать начальное положение тела будет зависеть точность и наглядность полученной траектории поворота, для этого получаем следующий код, который выполняет поворот на определенный угол, с определенным количеством шагов:

0 cosd(avg*rot) sind(avg*rot) 0

0 -sind(avg*rot) cosd(avg*rot) 0

rotateMatrix = [rotateMatrix; X];

Где соответственно degree – максимальный угол поворота, part – количество шагов для достижения максимального угла, avg – угол поворота за один шаг, rot – непосредственно счетчик для поворота на определенный угол(шаг поворота), tX – матрица поворачиваемого объекта, TrX, TrX1 – матрицы сопоставления оси вращения и базовой оси координат, Rx – матрица поворота относительно оси X,[X] – матрица поворота на определенный угол, rotateMatrix – матрица в которой хранятся значения всех координат точек, которые описывают объект при повороте.

Рисунок 4. Траектория поворота

На рисунке 4 показана траектория поворта цилиндра, в основе которого лежат 180 описывающих точек, по 90 на каждую грань, поворот осуществлялся на угол 55 градусов, за 20 шагов, относительно оси x’ лежащей ниже оси x на 22,85мм.

ПОЛУЧЕНИЕ ТРАЕКТОРИИ ДВИЖЕНИЯ ТЕЛА ПРИ МОДЕЛИРОВАНИИ ПОВОРОТА В СРЕДЕ MATLAB

магистрант, институт нано- и микросистемной техники МИЭТ,

Для получения траектории поворачиваемого тела сначала необходимо разобраться как происходит поворот относительной какой-либо из оси вращения. Вращение тела вокруг любой из локальных осей x′, y′ или z′ выполняется с помощью следующей процедуры:

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

Математически это можно записать так:

  • [X*] — преобразованное тело,
  • [X] — исходное тело,
  • [Tr] – матрица перемещения,
  • [Rx] — соответствующая матрица поворота,
  • [Tr] -1 — матрица, обратная к матрице перемещения.

Рисунок 1. Отрисовка цилиндрического тела в среде Matlab.

На рисунке 1 отображено начальное состояние тела, также на рисунке выделены по 4 точки на каждой грани, которые отвечают за математические вычисления при повороте.

Рисунок 2. Поворот вокруг оси, параллельной одной из координатных осей

Рисунок 3. Поворот вокруг оси, параллельной одной из координатных осей

Рассмотрим точки, лежащие на цилиндре, изображенные на рисунке 1, заданные матрицей координат X относительно глобальной системы координат xyz.

X =

Повернем точки, лежащие на цилиндре на q = +45° относительно локальной оси X*, проходящей через центр координатной оси на расстоянии -22.85 по оси Z от пересечения осей XY.

Координаты данной оси начинаются в точке [xc yc zc 1] = [0 0 -17.7 1], а продолжаются параллельно оси X. Вращение осуществляется следующим образом: [X*] = [X][Tr][Rx][Tr] -1

TrX = = ,

Rx = =

TrX -1 = = .

Первая матрица [TrX] сдвигает точки параллельно плоскости

x = 0 до тех пор, пока ось y′ не совпадет с осью y. Вторая матрица [Rx] выполняет требуемое вращение вокруг оси y, третья матрица [Tr] -1 переносит ось y′, а следовательно, и повернутые точки, обратно в исходное положение.

Объединив эти три матрицы, получим

= .

После подстановки числовых значений преобразованные координаты примут вид:

X* =

Результат изображен на рисунках 2 и 3.

В зависимости от количества точек, которые будут описывать начальное положение тела будет зависеть точность и наглядность полученной траектории поворота, для этого получаем следующий код, который выполняет поворот на определенный угол, с определенным количеством шагов:

0 cosd(avg*rot) sind(avg*rot) 0

0 -sind(avg*rot) cosd(avg*rot) 0

Читать еще:  Matlab help на русском

rotateMatrix = [rotateMatrix; X];

Где соответственно degree – максимальный угол поворота, part – количество шагов для достижения максимального угла, avg – угол поворота за один шаг, rot – непосредственно счетчик для поворота на определенный угол(шаг поворота), tX – матрица поворачиваемого объекта, TrX, TrX1 – матрицы сопоставления оси вращения и базовой оси координат, Rx – матрица поворота относительно оси X,[X] – матрица поворота на определенный угол, rotateMatrix – матрица в которой хранятся значения всех координат точек, которые описывают объект при повороте.

Рисунок 4. Траектория поворота

На рисунке 4 показана траектория поворта цилиндра, в основе которого лежат 180 описывающих точек, по 90 на каждую грань, поворот осуществлялся на угол 55 градусов, за 20 шагов, относительно оси x’ лежащей ниже оси x на 22,85мм.

Матрица поворота matlab

1.5. Векторы и матрицы в MatLab

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

Ниже показан пример задания вектора с именем a, и содержащий значения 1, 2, 3, 4:

a = [1 2 3 4]; % вектор-строка

Для доступа к тому или иному элементу вектора используется следующая конструкция языка:

disp( a(1) ); % отображение значения 1-го элемента вектора
disp( a(2) ); % отображение значения 2-го элемента вектора
disp( a(3) ); % отображение значения 3-го элемента вектора
disp( a(4) ); % отображение значения 4-го элемента вектора

т.е. нужно указать имя вектора и в круглых скобках написать номер индекса элемента, с которым предполагается работать. Например, для изменения значения 2-го элемента массива на 10 достаточно записать

a(2) = 10; % изменение значения 2-го элемента на 10

Часто возникает необходимость определения общего числа элементов в векторе, т.е. определения его размера. Это можно сделать, воспользовавшись функцией length() следующим образом:

N = length(a); % (N=4) число элементов массива а

Если требуется задать вектор-столбец, то это можно сделать так

a = [1; 2; 3; 4]; % вектор-столбец

b = [1 2 3 4]’; % вектор-столбец

при этом доступ к элементам векторов осуществляется также как и для векторов-строк.

Следует отметить, что векторы можно составлять не только из отдельных чисел или переменных, но и из векторов. Например, следующий фрагмент программы показывает, как можно создавать один вектор на основе другого:

a = [1 2 3 4]; % начальный вектор a = [1 2 3 4]
b = [a 5 6]; % второй вектор b = [1 2 3 4 5 6]

Здесь вектор b состоит из шести элементов и создан на основе вектора а. Используя этот прием, можно осуществлять увеличение размера векторов в процессе работы программы:

a = [a 5]; % увеличение вектора а на один элемент

Недостатком описанного способа задания (инициализации) векторов является сложность определения векторов больших размеров, состоящих, например, из 100 или 1000 элементов. Чтобы решить данную задачу, в MatLab существуют функции инициализации векторов нулями, единицами или случайными значениями:

a1 = zeros(1, 100); % вектор-строка, 100 элементов с
% нулевыми значениями
a2 = zeros(100, 1); % вектор-столбец, 100 элементов с
% нулевыми значениями
a3 = ones(1, 1000); % вектор-строка, 1000 элементов с
% единичными значениями
a4 = ones(1000, 1); % вектор-столбец, 1000 элементов с
% единичными значениями
a5 = rand(1000, 1); % вектор-столбец, 1000 элементов со
% случайными значениями

Матрицы в MatLab задаются аналогично векторам с той лишь разницей, что указываются обе размерности. Приведем пример инициализации единичной матрицы размером 3х3:

E = [1 0 0; 0 1 0; 0 01]; % единичная матрица 3х3

E = [1 0 0
0 1 0
0 0 1]; % единичная матрица 3х3

Аналогичным образом можно задавать любые другие матрицы, а также использовать приведенные выше функции zeros(), ones() и rand(), например:

A1 = zeros(10,10); % нулевая матрица 10х10 элементов

A2 = zeros(10); % нулевая матрица 10х10 элементов
A3 = ones(5); % матрица 5х5, состоящая из единиц
A4 = rand(100); % матрица 100х100, из случайных чисел

Для доступа к элементам матрицы применяется такой же синтаксис как и для векторов, но с указанием строки и столбца где находится требуемый элемент:

A = [1 2 3;4 5 6;7 8 9]; % матрица 3х3
disp( A(2,1) ); % вывод на экран элемента, стоящего во
% второй строке первого столбца, т.е. 4
disp( A(1,2) ); % вывод на экран элемента, стоящего в
% первой строке второго столбца, т.е. 2

Также возможны операции выделения указанной части матрицы, например:

B1 = A(:,1); % B1 = [1; 4; 7] – выделение первого столбца
B2 = A(2,:); % B2 = [1 2 3] – выделение первой строки
B3 = A(1:2,2:3); % B3 = [2 3; 5 6] – выделение первых двух
% строк и 2-го и 3-го столбцов матрицы А.

Размерность любой матрицы или вектора в MatLab можно определить с помощью функции size(), которая возвращает число строк и столбцов переменной, указанной в качестве аргумента:

a = 5; % переменная а
A = [1 2 3]; % вектор-строка
B = [1 2 3; 4 5 6]; % матрица 2х3
size(a) % 1х1
size(A) % 1х3
size(B) % 2х3

Матрица поворота matlab

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

Создание стандартных матриц

Создание векторов равноотстоящих точек в линейном и логарифмическом масштабах

Создание массивов со случайными элементами

Изменение порядка расположения элементов матриц

Вычисление сумм и произведений

Изменение формы матриц

Выделение треугольных частей матриц

Вычисление тестовых матриц

Матрицы представляют собой самые распространенные объекты системы MATLAB. Ниже описываются основные операции с матрицами. По обилию матричных операторов и функций MATLAB является лидером среди массовых систем компьютерной математики.

Читать еще:  Направления защиты информации

Создание матриц с заданными свойствами

Создание единичной матрицы

Для создания единичной матрицы (она обычно обозначается как Е) служит функция eye:

еуе(n) — возвращает единичную матрицу размера nrn;

eye(m.n) или еуе([m n]) — возвращают матрицу размера mm с единицами по диагонали и нулями в остальных ячейках;

eye(size(A)) — возвращает единичную матрицу того же размера, что и А.

Единичная матрица не определена для многомерных массивов. Так, функция у = eye([2,3,4]) при попытке ее вычисления приведет к ошибке.

Пример использования функции eye:

Создание матрицы с единичными элементами

Для создания матриц, все элементы которых — единицы, используется функция ones:

ones(n) — возвращает матрицу размера nхn, все элементы которой — единицы. Если п — не скаляр, то появится сообщение об ошибке;

ones(m.n) или ones([m п]) — возвращают матрицу размера mxn, состоящую из единиц;

ones(dl.d2,d3. ) или ones([dl1 d2 d3. ]) — возвращает массив из единиц с размером d1xd2xd3x. ;

ones(size(A)) — возвращает массив единиц той же размерности и размера, что и А. Матрица с единичными элементами в отличие от единичной матрицы в MATLAB определена и для многомерных массивов.

Создание матрицы с нулевыми элементами

Иногда нужны матрицы, все элементы которых — нули. Следующая функция обеспечивает создание таких матриц:

zeros(п) — возвращает матрицу размера nхn, содержащую нули. Если n — не скаляр, то появится сообщение об ошибке;

zeros(m.n) или zeros([m n]) — возвращают матрицу размера mxn, состоящую из нулей;

zeros(d1.d2,d3. ) или zeros([d1.d2.d3. ]) — возвращают массив из нулей размера d1xd2xd3x. ;

zeros(size(A)) — возвращает массив нулей того же размера и размерности, что и А.

Создание линейного массива равноотстоящих точек

Функция linspace формирует линейный массив равноотстоящих узлов. Это подобно оператору :, но дает прямой контроль над числом точек. Применяется в следующих формах:

llnspace(a.b) — возвращает линейный массив из 100 точек, равномерно распределенных между а и b;

linspace(a,b,n) — генерирует п точек, равномерно распределенных в интервале от а до b.

Columns I through 7

4.0000 5.2308 6.4615 7.6923 8.9231 10.153811.3846

Columns 8 through 14

Создание вектора равноотстоящих в логарифмическом масштабе точек

Функция logspace генерирует вектор равноотстоящих в логарифмическом масштабе точек. Она особенно эффективна при создании вектора частот. Это логарифмический эквивалент оператора : и функции linspace:

logspace(a.b) — возвращает вектор-строку из 50 равноотстоящих в логарифмическом масштабе точек между декадами 10^0 и 10^b;

logspace(a.b.n) — возвращает n точек между декадами 10^a и 10^b;

logspace(a.pi) — возвращает точки в интервале между 10^a и п. Эта функция очень полезна в цифровой обработке сигналов.

Все аргументы функции logspace должны быть скалярными величинами. Пример:

Columns 1 through 7

Columns 8 through 14

Создание массивов со случайными элементами

р = randperm(n) — возвращает случайные перестановки целых чисел 1:n в векторе-строке. Пример:

Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0, 1):

rand(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;

rand(m.n) или rand([m п]) — возвращают матрицу размера mxn;

rand(m.n,p. ) или rand([m n р. ]) — возвращает многомерный массив;

rand(size(A)) — возвращает массив того же размера и размерности, что и А, с элементами, распределенными по равномерному закону;

rand (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет равномерный закон распределения;

rand(‘ state’) — возвращает вектор с 35 элементами, содержащий текущее состояние генератора случайных чисел с равномерным распределением. Для изменения состояния генератора можно применять следующие формы этой функции:

    rand(‘state’ .s) — устанавливает состояние в s;

    rand( ‘state’ ,0) — сбрасывает генератор в начальное состояние;

    rand( ‘state’. j) — для целых j, устанавливает генератор в j-е состояние;

    rand( ‘state’ ,sum(100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.

    0.9501 0.8913 0.8214

    0.2311 0.7621 0.4447

    0.6068 0.4565 0.6154

    0.4860 0.0185 0.7919

    Проверить равномерность распределения случайных чисел можно, построив большое число точек на плоскости со случайными координатами. Это делается с помощью следующих команд:

    Полученный при этом график показан на рис. 10.1. Нетрудно заметить, что точки довольно равномерно распределены на плоскости, так что нет оснований не доверять заданному закону распределения координат точек.

    Рис. 10.1. Случайные точки с равномерным распределением координат на плоскости

    Функция randn генерирует массив со случайными элементами, распределенными по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением, равным 1:

    randn(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;

    randn(m.n) или randn([m n]) — возвращают матрицу размера mxn;

    randn(m,n,p. ) или randn([m n р. ]) — возвращает массив с элементами, значения которых распределены по нормальному закону;

    randn(size(A)) — возвращает массив того же размера, что и А, с элементами, распределенными по нормальному закону;

    randn (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет нормальное распределение;

    randn( ‘state’) — возвращает двухэлементный вектор, включающий текущее состояние нормального генератора. Для изменения состояния генератора можно применять следующие формы этой функции:

      Читать еще:  Fetch array php

      randn(‘state’,s) — устанавливает состояние в s;

      randn(‘state’ ,0) — сбрасывает генератор в начальное состояние;

      randn(‘state’, j) — для целых j устанавливает генератор в J-e состояние;

      randn(‘state’, sum( 100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.

      -0.4326 -1.1465 0.3273

      -1.6656 1.1909 0.1746

      0.1253 1.1892 -0.1867

      0.2877 -0.0376 0.7258

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

      строят гистограмму (рис. 10.2) из 100 столбцов для 10 000 случайных чисел с нормальным распределением.

      Рис. 10.2. Гистограмма для 10 000 нормально распределенных чисел в 100 интервалах

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

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

      Конкатенацией называют объединение массивов, которое реализует следующая функция.

      С = cat (dim, А, В) — объединяет массивы А и В в соответствии со спецификацией размерности dim и возвращает объединенный массив; dim = 1 — горизонтальная конкатенация, dim = 2 — вертикальная, dim = 3 — многомерный массив размерности 3 и т. д.;

      С = cat(dim,Al,A2,A3,A4. ) объединяет все входные массивы (А1, А2, A3, А4 и т. д.) в соответствии со спецификацией размерности dim и возвращает объединенный массив;

      cat(2.A,B) — это то же самое, что и [А,В],асаt(,А,В) —то же самое, что и [А; В]. При записи cat (dim, С (:)) или cat (dim, С. field) эта функция применима к массивам ячеек или структур, содержащим численные матрицы. Пример:

      Создание матриц с заданной диагональю

      Свойства матриц сильно зависят от их диагональных элементов. Следующая функция MATLAB позволяет создавать специальные типы матриц с заданными диагональными элементами:

      Матрица поворота matlab

      Формирование векторов и матриц

      Особенности задания векторов и матриц

      Описанные выше простые правила вычислений распространяются и на гораздо более сложные вычисления, которые (при использовании обычных языков программирования типа Бейсик или Паскаль) требуют составления специальных программ. MATLAB — система, специально предназначенная для проведения сложных вычислений с векторами, матрицами и массивами. При этом она по умолчанию предполагает, что каждая заданная переменная — это вектор, матрица или массив. Все определяется конкретным значением переменной. Например, если задано Х=1, то это значит, что X —это вектор с единственным элементом, имеющим значение 1. Если надо задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами. Так, например, присваивавание
      » V=[l 2 3]

      V=
      1 2 3
      задает вектор V, имеющий три элемента со значениями 1, 2 и 3. После ввода вектора система выводит его на экран дисплея.
      Задание матрицы требует указания нескольких строк. Для разграничения строк используется знак ; (точка с запятой). Этот же знак в конце ввода предотвращает вывод матрицы или вектора (и вообще результата любой операции) на экран дисплея. Так, ввод
      » М=[1 2 3: 4 5 6; 7 8 9];
      задает квадратную матрицу, которую можно вывести:
      » M
      M =
      1 2 3

      7 8 9
      Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции, например:
      » V= [2+2/(3+4) exp(5) sqrt(l0)]:

      2.2857 148.4132 3.1623
      Для указания отдельного элемента вектора или матрицы используются выражения вида V(1) или M(i. j). Например, если задать
      » М(2. 2)
      arts= 5
      то результат будет равен 5. Если нужно присвоить элементу M(i. j) [ В тексте программ MATLAB лучше не использовать i и j как индексы, так как i и j — обозначение квадратного корня из -1. Но можно использовать I и J. — Примеч. ред. ] новое значение х, следует использовать выражение
      M(ij)=x
      Например, если элементу М(2, 2) надо присвоить значение 10, следует записать

      » М(2. 2)=10
      Выражение М( i) с одним индексом дает доступ к элементам матрицы, развернутым в один столбец. Такая матрица образуется из исходной, если подряд выписать ее столбцы.
      Следующий пример поясняет такой доступ к элементам матрицы М:
      » М=[1 2 3: 4 5 6: 7 8 9]

      М =
      1 2 3
      4 5 6
      7 8 9

      М =
      1 2 3
      4 100 6
      7 8 9
      Возможно задание векторов и матриц с комплексными элементами, например:
      » i=sqrt(-l):
      » СМ =[1 2: 3 4] + i*[5 6: 7 8]
      или
      » СМ — [1+5*1 2+6*1: 3+7*1 4+8*1]
      Это создает матрицу:
      CM=
      1.0000 + 5.00001 2.0000 + 6.00001

      3.0000 + 7.00001 4.0000 + 8.00001
      Наряду с операциями над отдельными элементами матриц и векторов система позволяет производить операции умножения, деления и возведения в степень сразу над всеми элементами, т. е. над массивами. Для этого перед знаком операции ставится точка. Например, оператор * означает умножение для векторов или матриц, а оператор .* —поэлементное умножение всех элементов массива. Так, если М — матрица, то М.*2 даст матрицу, все элементы которой умножены на скаляр — число 2. Впрочем, для умножения матрицы,на скаляр оба выражения — М*2 и М.*2 — оказываются эквивалентными.
      Имеется также ряд особых функций для задания векторов и матриц. Например, функция magic(n) задает магическую матрицу размера пхп, у которой сумма всех столбцов, всех строк и даже диагоналей равна одному и тому же числу:
      » M=magic(4)

      Ссылка на основную публикацию
      ВсеИнструменты 220 Вольт
      Adblock
      detector