MATLAB Function Reference | ![]() ![]() |
表示
T = viewmtx(az,el) T = viewmtx(az,el,phi) T = viewmtx(az,el,phi,xc)
詳細
viewmtx
は、2次元の曲面(たとえば、コンピュータのスクリーン)上に、4次元の同次ベクトルを射影する 4行4列の正射影行列、または、透視投影変換行列を計算します。
T = viewmtx(az,el)
は、方位角 az
と仰角 el
に対応する正射影変換行列を出力します。az
は、視点の方位角(水平方向の回転)を角度で表わしたものです。el
は、視点の仰角を角度で表わしたものです。これは、つぎのコマンドの結果と同じ行列を出力します。
view(az,
el)
T = view
T = viewmtx(az,el,phi)
は、透視投影変換行列を出力します。phi
は、透視法の視点を角度で表わしたものです。phi
は、正規化されたプロット立方体の視点角度で、透視法の歪みの量を制御します。
Phi |
詳細 |
0 度 |
正射影 |
10 度 |
望遠レンズに似ています |
25 度 |
標準レンズに似ています |
60 度 |
広角レンズに似ています |
出力される行列を使って、view(T)
で視点変換を設定することができます。4行4列の透視投影変換行列は、4次元の同次ベクトルを (x,y,z,w) 形式の正規化されていないベクトルに変換します。ここで、w は、1 ではありません。正規化されたベクトル(x/w, y/w, z/w, 1)の x 成分と y 成分は、希望する 2次元の成分となります(下記の例題を参照)。
T = viewmtx(az,el,phi,xc)
は、正規化されたプロット立方体内部のターゲット点として、xc
を使って透視投影変換行列を出力します(つまり、カメラは点 xc
で見ています)。xc
は、視点の中心にあるターゲット点です。この点は、3 要素ベクトル xc = [xc,yc,zc]
で、区間 [0,1] で指定します。デフォルト値は、xc = [0,0,0]
です。
注意
4 次元の同次ベクトルは、対応する 3 次元ベクトルに 1 を付け加えたものです。たとえば、[x,y,z,1]
は、3 次元の点 [x,y,z]
に対応する 4 次元ベクトルです。
例題
デフォルトの視点方向を使って、3 次元の点 (0.5, 0.0, -3.0) に対応する射影された 2 次元ベクトルを決定します。この点は、列ベクトルです。
A = viewmtx(--37.5,
30); x4d = [.5 0 --3 1]'; x2d =A
*x4d; x2d = x2d(1:2) x2d = 0.3967 --2.4459
x = [0 1 1 0 0 0 1 1 0 0 1 1 1 1 0 0]; y = [0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1]; z = [0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 0];
で、これらのベクトル内の点をスクリーンに変換し、オブジェクトをプロットします。
A = viewmtx(--37.5,30); [m,n] = size(x); x4d = [x(:),y(:),z(:),ones(m*n,1)]'; x2d = A*x4d; x2 = zeros(m,n); y2 = zeros(m,n); x2(:) = x2d(1,:); y2(:) = x2d(2,:); plot(x2,y2)
![]()
A = viewmtx(--37.5,30,25
);
x4d = [.5 0 --3 1]';
x2d = A*x4d;
x2d = x2d(1:2)/x2d(4) % Normalize
x2d =
0.1777
--1.8858
立方体ベクトルをスクリーンに変換し、オブジェクトをプロットします。
A = viewmtx(--37.5,30,25); [m,n] =size
(x); x4d = [x(:),y(:),z(:),ones
(m*n,1)]'; x2d = A*x4d; x2 =zeros
(m,n); y2 = zeros(m,n); x2(:) = x2d(1,:)./x2d(4,:); y2(:) = x2d(2,:)./x2d(4,:);plot
(x2,y2)
![]()
参考
![]() | view | volumebounds | ![]() |