Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

hgtransform

変換オブジェクトの作成

構文

h = hgtransform
h = hgtransform('PropertyName',propertyvalue,...)
h = hgtransform(ax,...)

プロパティ

プロパティの一覧については、Transform のプロパティ を参照してください。

説明

h = hgtransformTransform オブジェクトを作成し、そのハンドルを返します。

h = hgtransform('PropertyName',propertyvalue,...) は、引数リストに指定されたプロパティ値設定を使用して Transform オブジェクトを作成します。プロパティの詳細については、Transform のプロパティ を参照してください。

h = hgtransform(ax,...) は、現在の座標軸 (gca) ではなく ax で指定された座標軸に Transform オブジェクトを作成します。オプションの ax は、前述の構文のすべての入力引数の組み合わせより前に指定できます。

Transform オブジェクトは他のオブジェクトを含むことができるため、可視性、サイズ、方向などに関して、Transform オブジェクトおよびその子オブジェクトを 1 つのエンティティとして扱うことができます。複数のオブジェクトをグループ化するには、1 つの Transform オブジェクトをそれらの親にします (つまり、オブジェクトの Parent プロパティを変換オブジェクトのハンドルに設定する)。

h = hgtransform;
surface('Parent',h,...)

Transform オブジェクトを複数のオブジェクトの親にする主な利点は、複数の子オブジェクトに対して "変換" (並進、スケーリング、回転など) を一度に実行できることです。

Transform オブジェクトの親は、Axes オブジェクトまたは他の Transform オブジェクトのいずれかです。

Transform オブジェクトが非表示になりますが、Visible プロパティを off に設定すると、そのすべての子オブジェクトも非表示になります。

例外と制限

  • Transform オブジェクトは、同じ座標軸に属する任意の数の axes 子オブジェクトの親になることができますが、light オブジェクトは例外です。

  • Transform オブジェクトは axes オブジェクトの親にはなれないため、1 つの座標軸にあるオブジェクトのみを含むことができます。

  • Transform オブジェクトは、同じ座標軸内の他の変換オブジェクトの親になることができます。

  • イメージは真の 3 次元オブジェクトでないため、Image オブジェクトは変換できません。イメージ データを表面の CData にテクスチャ マッピングすると 3 次元空間でのイメージ変換の効果を実現できます。

  • text オブジェクトがデータ単位を使用しない限り、変換は text オブジェクトに影響しません。Text オブジェクトの位置がデータ単位で指定されている場合、変換によりテキストの左下隅が移動します。変換は、フォント サイズや方向には影響しません。フォント サイズや方向を変更するには、テキスト プロパティを使用します。

メモ

多くのプロット関数はグラフを描画する前に座標軸をクリア (座標軸の子を削除) します。座標軸を消去すると、その座標軸内の Transform オブジェクトもすべて削除されます。

すべて折りたたむ

この例では、1 つの変換オブジェクトを親オブジェクトとする surface オブジェクトのグループで 3 次元の星形を作成する方法を示します。次に、変換オブジェクトが z 軸を中心にオブジェクトを回転し、そのサイズをスケーリングします。

Axes を作成し、ビューを調整します。Axes 制限を設定し、スケーリング中の自動制限選択を防ぎます。

ax = axes('XLim',[-1.5 1.5],'YLim',[-1.5 1.5],'ZLim',[-1.5 1.5]);
view(3)
grid on

変換オブジェクトを親オブジェクトとするオブジェクトを作成します。

[x,y,z] = cylinder([.2 0]);
h(1) = surface(x,y,z,'FaceColor','red');
h(2) = surface(x,y,-z,'FaceColor','green');
h(3) = surface(z,x,y,'FaceColor','blue');
h(4) = surface(-z,x,y,'FaceColor','cyan');
h(5) = surface(y,z,x,'FaceColor','magenta');
h(6) = surface(y,-z,x,'FaceColor','yellow');

変換オブジェクトを作成し、surface オブジェクトの親オブジェクトにします。回転およびスケーリング行列を単位行列 (eye) に初期化します。

t = hgtransform('Parent',ax);
set(h,'Parent',t)

Rz = eye(4);
Sxy = Rz;

z 軸回転行列およびスケーリング行列を形成します。r のインクリメント値を使用し、グループを回転させてスケーリングします。

for r = 1:.1:2*pi
    % Z-axis rotation matrix
    Rz = makehgtform('zrotate',r);
    % Scaling matrix
    Sxy = makehgtform('scale',r/4);
    % Concatenate the transforms and
    % set the transform Matrix property
    set(t,'Matrix',Rz*Sxy)
    drawnow
end
pause(1)

単位行列を使用して、元の方向およびサイズにリセットします。

set(t,'Matrix',eye(4))

この例では、変換オブジェクトを 2 つ作成し、同じ座標軸内で個別に変換する方法を示します。平行移動の変換は、1 つの変換オブジェクトを原点から移動します。

両方の変換オブジェクトの親オブジェクトになる axes オブジェクトを作成して、設定します。制限を設定して、移動するオブジェクトを追加します。

ax = axes('XLim',[-3 1],'YLim',[-3 1],'ZLim',[-1 1]);
view(3)
grid on

グループにまとめる Surface オブジェクトを作成します。

[x,y,z] = cylinder([.3 0]);
h(1) = surface(x,y,z,'FaceColor','red');
h(2) = surface(x,y,-z,'FaceColor','green');
h(3) = surface(z,x,y,'FaceColor','blue');
h(4) = surface(-z,x,y,'FaceColor','cyan');
h(5) = surface(y,z,x,'FaceColor','magenta');
h(6) = surface(y,-z,x,'FaceColor','yellow');

変換オブジェクトを作成し、これらを同じ座標軸の親オブジェクトにします。次に、変換 t1 を表面の親にします。surface オブジェクトをコピーして、変換 t2 をそのコピーの親にします。この Figure は変更できません。

t1 = hgtransform('Parent',ax);
t2 = hgtransform('Parent',ax);

set(h,'Parent',t1)
h2 = copyobj(h,t2);

2 つめの変換オブジェクトを平行移動して最初の変換オブジェクトから離し、その結果を表示します。

Txy = makehgtform('translate',[-1.5 -1.5 0]);
set(t2,'Matrix',Txy)
drawnow

両方の変換オブジェクトを逆方向に回転します。

10 回転 (2pi ラジアン = 1 回転)

for r = 1:.1:20*pi
    % Form z-axis rotation matrix
    Rz = makehgtform('zrotate',r);
    % Set transforms for both transform objects
    set(t1,'Matrix',Rz)
    set(t2,'Matrix',Txy*inv(Rz))
    drawnow
end

バージョン履歴

R2006a より前に導入