Матрица сдвига как комбинация базовых преобразований?
Я знаю матрицы преобразования для вращения, масштабирования, перемещения и т. Д. Я также знаю матрицу для преобразования сдвига. Теперь мне нужно иметь матрицу сдвига
[1 Sx 0]
[0 1 0]
[0 0 1]
в виде комбинации других вышеперечисленных преобразований. Пробовал поиск, пробовал мозговой штурм, но не смог нанести удар! Спасибо!
4 ответа
Операция x-shear для угла сдвига theta
сводится к поворотам и масштабированию следующим образом:
(а) повернуть на theta/2
против часовой стрелки.
(б) Шкала с x-scaling factor = sin(theta/2)
а также y-scaling factor = cos(theta/2)
,
(c) Повернуть на 45 degree
по часовой стрелке.
(d) Шкала с x-scaling factor = sqrt(2)/sin(theta)
, а также y-scaling factor= sqrt(2)
,
Да, это может быть сделано, вращение с последующим неравномерным масштабированием и обратным вращением. Вы можете найти подробности здесь в третьем вопросе http://www.cs.cmu.edu/~djames/15-462/Fall03/assts/15-462-Fall03-wrAssign1-answer.pdf. Вы также можете попробовать следующий код openGL. Он поворачивает прямоугольник на 45 градусов, затем масштабируется по оси X. а затем вращается в -26 градусов, то есть атан (0,5). 0,5 получается из определения угла между осью X и одной стороной после масштабирования в направлении X.
glRotatef (-26,0, 0,0, 0,0, 1,0);
glScalef (2,1,1);
glRotatef (45,0, 0,0, 0,0, 1,0);
glRectf (0, 0, 25,0, 25,0);
В 3D-графике мы часто используем 4
Икс 4
Матрица с 16 полезными элементами. Личность 4
Икс 4
Матрица выглядит следующим образом:
Между этими шестнадцатью элементами имеется 6 различных коэффициентов сдвига:
shear XY
shear XZ
shear YX
shear YZ
shear ZX
shear ZY
В матрице сдвига они следующие:
Потому что нет Rotation coefficients
Всего в этой Матрице шесть Shear coefficients
вместе с тремя Scale coefficients
позволяют вращать 3D-объекты о X
, Y
, а также Z
ось с использованием магической тригонометрии (sin
а также cos
).
Вот пример того, как вращать 3D-объект (CCW) о его Z
ось с использованием элементов Shear и Scale:
Посмотрите на 3 различных шаблона вращения, используя элементы Shear и Scale:
Ножницы - это элементарная матричная операция, поэтому, хотя вы можете выразить их как "комбинацию других матричных операций", это действительно странно. Ножницы принимают две формы:
| 1 V | | 1 0 |
| 0 1 | , | V 1 |
Принимая во внимание, что матрица вращения намного более вовлечена; Идея выразить сдвиг с помощью поворотов предполагает, что вы еще не написали эти вещи, чтобы увидеть, что вам нужно, поэтому давайте посмотрим на это. Матрица вращения имеет вид:
| cos -sin |
| sin cos |
Который может быть составлен в виде последовательности из трех конкретных матриц сдвига, R = Sx x Sy x Sx:
| cos(a) -sin(a) | | 1 0 | | 1 sin(a) | | 1 0 |
| | = | | x | | x | |
| sin(a) cos(a) | | -tan(a/2) 1 | | 0 1 | | -tan(a/2) 1 |
Теперь мы можем сделать несколько простых манипуляций с матрицей, чтобы получить Sy. Первое левое умножение:
R = Sx x Sy x Sx
Sx⁻¹ x R = Sx⁻¹ x Sy x Sx
Sx⁻¹ x R = I x Sy x Sx
Sx⁻¹ x R = Sy x Sx
А затем вправо - умножьте:
Sx⁻¹ x R x Sx⁻¹ = Sy x Sx x Sx⁻¹
Sx⁻¹ x R x Sx⁻¹ = Sy x I
Sx⁻¹ x R x Sx⁻¹ = Sy
Как банальное переписывание, один сдвиг теперь два сдвига и вращение.
Но гораздо более важный вопрос: зачем вам выражать матрицу сдвига как-то еще? Это уже элементарная матричная форма, в какой странной вычислительной среде вы находитесь, или какую безумную вещь вы пытаетесь сделать, требующую от вас выразить элементарное преобразование как способ более сложный, более медленный для вычисления? знак равно