Main Content

viewmtx

構文

viewmtx
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 は、視点の仰角を度単位で表したものです。

T = viewmtx(az,el,phi) は、"透視投影" 変換行列を返します。phi は、透視投影の視野角を度単位で表したものです。phi は、正規化されたプロット立方体の画角 (度単位) で、透視投影の歪みの量を制御します。

Phi

説明

0 °

正投影

10°

望遠レンズと同等

25°

標準レンズと同等

60°

広角レンズと同等

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 = 2×1

    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)

Figure contains an axes object. The axes object contains an object of type line.

25 度の視点角度で透視投影変換を使います。

A = viewmtx(-37.5,30,25);
x4d = [.5 0 -3 1]';
x2d = A*x4d;
x2d = x2d(1:2)/x2d(4)
x2d = 2×1

    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)

Figure contains an axes object. The axes object contains an object of type line.

バージョン履歴

R2006a より前に導入