Main Content

hgtransform

グラフィックス オブジェクトの変換

    説明

    h = hgtransform は、現在の座標軸に Transform オブジェクトを作成します。座標軸が存在しない場合、hgtransform は新しい座標軸を作成します。Transform オブジェクトの作成後にそのプロパティのクエリや設定を行うには、h を使用します。プロパティの一覧については、Transform のプロパティを参照してください。

    Transform オブジェクトは、グラフィックス オブジェクトのグループを変換するためのコンテナーとして使用できます。各オブジェクトの座標データを変更する必要はありません。オブジェクトをグループ化するには、単一の Transform オブジェクトをそれらの親にします。その Transform オブジェクトで平行移動、スケーリング、回転などの "変換" を実行することで、子オブジェクトをまとめて変更します。

    h = hgtransform(Name,Value) は、1 つ以上の名前と値の引数を使用して Transform オブジェクトのプロパティを設定します。たとえば、hgtransform(Matrix=M) は、変換行列 M を使用して現在の座標軸に Transform オブジェクトを作成します。プロパティの一覧については、Transform のプロパティを参照してください。

    h = hgtransform(parent,___) は、現在の座標軸ではなく、parent で指定された座標軸、グループ、または変換に Transform オブジェクトを作成します。前述の任意の構文で、最初の引数として parent を指定します。

    すべて折りたたむ

    オブジェクトのグループを "z" 軸を中心に回転します。Surface オブジェクトで構成される 3 次元の星形を作成します。その後、Transform オブジェクトを親にしてオブジェクトをグループ化し、すべてのオブジェクトにまとめて変換を適用します。

    まず、座標軸を作成し、表示を調整します。グリッド ラインを表示し、座標軸にラベルを付けます。

    ax = axes("XLim",[-1.5 1.5],"YLim",[-1.5 1.5],"ZLim",[-1.5 1.5]);
    view(3)
    grid on
    xlabel(ax,"x-axis");
    ylabel(ax,"y-axis");
    zlabel(ax,"z-axis");

    複数の Surface オブジェクトで構成される 3 次元の星形をプロットします。表面は単一の形状を表すため、それらを配列 s に格納します。

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

    グラフィックス オブジェクトを変換用にグループ化するには、Transform オブジェクトを作成し、それを Surface オブジェクトの親にします。

    h = hgtransform;
    set(s,"Parent",h)

    表面のグループを "z" 軸を中心に pi ラジアン回転する回転行列を作成します。その後、Transform オブジェクト hMatrix プロパティを設定して回転行列を適用します。h を親とする表面が "z" 軸を中心に pi ラジアン回転します。

    R = makehgtform("zrotate",pi);
    h.Matrix = R;

    別々のオブジェクトを同じ座標軸内で個別に変換できます。

    まず、座標軸を作成し、表示を調整します。グリッド ラインを表示し、座標軸にラベルを付けます。

    ax = axes("XLim",[-3 1],"YLim",[-3 1],"ZLim",[-3 1]);
    view(3)
    grid on
    xlabel(ax,"x-axis");
    ylabel(ax,"y-axis");
    zlabel(ax,"z-axis");

    球面を 2 つ作成します。

    [x,y,z] = sphere;
    s1 = surface(x,y,z);
    s2 = surface(x,y,z);

    指定した座標軸に Transform オブジェクトを 2 つ作成します。

    h1 = hgtransform(ax);
    h2 = hgtransform(ax);

    h1 を一方の球面の親にし、h2 をもう一方の球面の親にします。

    s1.Parent = h1;
    s2.Parent = h2;

    2 つ目の球面を平行移動して 1 つ目の球面から遠ざける平行移動行列を作成します。その後、Transform オブジェクト h2Matrix プロパティを設定して平行移動行列を適用します。

    Txy = makehgtform("translate",[-1.5 -1.5 0]);
    h2.Matrix = Txy;

    スケーリングと回転の変換をアニメーション化します。オブジェクトを 2 倍にスケーリングするスケーリング行列とオブジェクトを z 軸を中心に回転する回転行列を組み合わせた変換行列を作成します。その変換をオブジェクトに適用し、スケール係数と回転角度をループでインクリメントしてスケーリングと回転のアニメーション効果を表示します。

    まず、座標軸を作成し、表示を調整します。グリッド ラインを表示し、座標軸にラベルを付けます。

    ax = axes("XLim",[-2 2],"YLim",[-2 2],"ZLim",[-2 2]);
    view(3)
    grid on
    xlabel(ax,"x-axis");
    ylabel(ax,"y-axis");
    zlabel(ax,"z-axis");

    複数の Surface オブジェクトで構成される 3 次元の星形をプロットします。表面は単一の形状を表すため、それらを単一の配列 s に格納します。

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

    グラフィックス オブジェクトを変換用にグループ化するには、Transform オブジェクトを作成し、それを Surface オブジェクトの親にします。

    h = hgtransform;
    set(s,"Parent",h)

    表面のグループを同時にスケーリングおよび回転するアニメーションを作成します。スケーリング行列と回転行列を定義し、それらを乗算して両方の変換を同時に適用します。変換の Matrix プロパティをこの組み合わせた変換行列に設定し、ループの各反復で 3 次元の星形を描画します。

    for r = 1:.1:pi
        Rz = makehgtform("zrotate",r);
        Sxy = makehgtform("scale",r/2);
        h.Matrix = Rz*Sxy;
        drawnow
        pause(0.1)
    end

    入力引数

    すべて折りたたむ

    親コンテナー。Axes オブジェクト、Group オブジェクト、または別の Transform オブジェクトとして指定します。

    名前と値の引数

    引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

    例: hgtransform(Matrix=M) は、変換行列を M と指定します。

    R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

    例: hgtransform("Matrix","M") は、変換行列を M と指定します。

    メモ

    ここでは、プロパティの一部だけを紹介しています。完全な一覧については、Transform のプロパティを参照してください。

    Transform オブジェクトおよびその子に適用される変換行列。4 行 4 列の行列として指定します。この行列の定義についての詳細は、hgtransform によってサポートされる変換を参照してください。

    データ型: double

    可視性。'on' または 'off'、もしくは数値または logical 1 (true) または 0 (false) として指定します。'on' の値は true と等価であり、'off'false と等価です。したがって、このプロパティの値を logical 値として使用できます。値は matlab.lang.OnOffSwitchState 型の on/off logical 値として格納されます。

    • 'on'Transform オブジェクト内のすべてのオブジェクトを表示します。

    • 'off'Transform オブジェクト内のすべてのオブジェクトを非表示にします。非表示の Transform オブジェクトのプロパティに引き続きアクセスできます。Transform オブジェクトの Visible プロパティを設定しても Transform オブジェクト内のオブジェクトの Visible プロパティは変更されません。

    子によってキャプチャされたマウス クリックへの応答。'on' または 'off'、もしくは数値または logical 1 (true) または 0 (false) として指定します。'on' の値は true と等価であり、'off'false と等価です。したがって、このプロパティの値を logical 値として使用できます。値は matlab.lang.OnOffSwitchState 型の on/off logical 値として格納されます。

    • 'on'Transform オブジェクトの ButtonDownFcn コールバックをトリガーします。ContextMenu プロパティが定義されている場合は、コンテキスト メニューを呼び出します。

    • 'off'Transform オブジェクトのコールバックをトリガーしません。代わりに、HitTest プロパティが 'on' に設定され、マウス クリックをキャプチャできる PickableParts プロパティ値をもつ、最も近い先祖のコールバックをトリガーします。

    Transform オブジェクトはマウス クリックをキャプチャしません。しかし、Transform オブジェクトの子がクリックされ、子の HitTest プロパティが 'off' に設定されている場合、子はクリックを Transform オブジェクトに渡します。

    制限

    • Transform オブジェクトは任意の数のグラフィックス オブジェクトの親にすることができますが、含めることができるのは同じ座標軸のオブジェクトだけです。

    ヒント

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

      h = hgtransform;
      p = plot(1:10);
      h.Matrix;
      Invalid or deleted object.
    • 変換行列を単位行列に設定すると、Transform オブジェクトの子オブジェクトをそれらの元の向き、位置、サイズに戻すことができます。たとえば、変換行列 M を適用した後に変換 t の子オブジェクトをそれらの元の状態に戻します。

      t = hgtransform(Matrix=M);
      ...
      t.Matrix = eye(4);
      変換操作は現在の変換に対する相対項ではなく絶対項で定義されるため、単位行列によってそれまでのすべての変換がリセットされます。単位行列の詳細については、関数 eye を参照してください。

    • Text オブジェクトは Transform オブジェクトの子にすることができますが、スケーリングと回転の変換はテキストには効果がありません。テキストのフォント サイズや向きを変更するには、代わりに TextSizeRotation などのテキスト プロパティを設定します。詳細については、Text のプロパティを参照してください。

    • Light オブジェクトは Transform オブジェクトの子にすることができますが、変換はライトの位置には効果がありません。光源の位置や向きを変更するには、代わりに Light オブジェクトの Position プロパティを設定します。詳細については、Light のプロパティを参照してください。

    バージョン履歴

    R2006a より前に導入