ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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 は、視点の仰角を角度で表したものです。これは、次のコマンドの結果と同じ行列を返します。

view(az,el)
T = view

しかし、現在の視点は変更しません。

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 =
   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,:);
figure
plot(x2,y2)

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

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

立方体ベクトルを変換して画面に表示し、オブジェクトをプロットします。

figure
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)

この情報は役に立ちましたか?