Матрица трехмерного представления Matlab

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

12
задан Ofer 31 May 2012 в 05:56
поделиться