Пусть 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: = становится
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 означает, что она не только вращается, но и отражается. Зачем нам нужно размышление?