Матрица сдвига как комбинация базовых преобразований?

Я знаю матрицы преобразования для вращения, масштабирования, перемещения и т. Д. Я также знаю матрицу для преобразования сдвига. Теперь мне нужно иметь матрицу сдвига

[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

Как банальное переписывание, один сдвиг теперь два сдвига и вращение.

Но гораздо более важный вопрос: зачем вам выражать матрицу сдвига как-то еще? Это уже элементарная матричная форма, в какой странной вычислительной среде вы находитесь, или какую безумную вещь вы пытаетесь сделать, требующую от вас выразить элементарное преобразование как способ более сложный, более медленный для вычисления? знак равно

Другие вопросы по тегам