Пусть A
— матрица представления MATLAB 4x4, полученная из функции представления следующим образом:
A = view;
A(1:3,1:3)
должно соответствовать вращению и масштабированию,
A(1:3,4)
должно соответствовать переводу, а
A(4,:)
должно быть просто [0 0 0 1]
.
При настройке параметров камеры для следующего простого сценария:
camproj('orthographic')
set(gca, 'CameraPosition', [0,0,0])
set(gca, 'CameraTarget', [0,0,1])
set(gca, 'CameraUpVector', [0,1,1])
Я получаю, что A = view
равно:
-1 0 0 0.5
0 1 0 -0.5
0 0 1 -0.5
0 0 0 1
Теперь я не могу понять, откуда берутся 0,5. Обратите внимание, что я установил положение камеры на [0,0,0], поэтому перевода быть не должно.
Еще одна особенность: установка положения камеры на [0,0,10] с помощью:
set(gca, 'CameraPosition', [0,0,10])
приводит к тому, что матрица A:=view становится
1 0 0 -0.5
0 1 0 -0.5
0 0 -1 5.5
0 0 0 1
Итак, я заметил, что -0,5 изменилось на 5,5 в . ] A(3,4)
и это как-то связано с 5 = 10/2.
То есть изменение положения камеры на [0,0,a] изменяет матрицу вида на A(3,4)
примерно на a / 2
.
Это... странно? Своеобразный? Странный?
Обновление: Еще одна особенность заключается в том, что определитель A(1:3,1:3) равен -1, хотя для матрицы вращения он должен быть равен 1. Когда он равен -1, это означает, что это не только вращение, но и отражение. Зачем нам отражение?