Main Content

hgtransform

그래픽스 객체 변환

    설명

    예제

    h = hgtransform은 현재 좌표축에 Transform 객체를 만듭니다. 좌표축이 없는 경우 hgtransform은 새로운 좌표축을 만듭니다. h를 사용하면 Transform 객체가 생성된 후에 이 객체의 속성을 쿼리하고 설정할 수 있습니다. 속성 목록은 Transform 속성 항목을 참조하십시오.

    각 객체의 좌표 데이터를 수정하지 않고 그래픽스 객체 그룹을 변환하기 위한 컨테이너로서 Transform 객체를 사용할 수 있습니다. 객체들의 부모로 하나의 Transform 객체를 지정하여 객체들을 그룹화한 다음 Transform 객체에 대해 평행 이동, 스케일링, 회전과 같은 변환을 수행하여 자식 객체들을 그룹으로 수정합니다.

    h = hgtransform(Name,Value)는 하나 이상의 이름-값 인수를 사용하여 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");

    구를 두 개 만듭니다.

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

    지정된 축에 두 개의 Transform 객체를 만듭니다.

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

    h1을 한 구의 부모로 지정하고, h2를 다른 구의 부모로 지정합니다.

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

    두 번째 구를 첫 번째 구에서 멀어지도록 평행 이동시키는 평행 이동 행렬을 만듭니다. 그런 다음 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'나 숫자형 값 또는 논리값 1(true) 또는 0(false)으로 지정됩니다. 값 'on'true와 동일하고 값 'off'false와 동일합니다. 따라서 이 속성의 값을 논리값으로 사용할 수 있습니다. 값은 matlab.lang.OnOffSwitchState 유형의 on/off 논리값으로 저장됩니다.

    • 'on'Transform 객체의 모든 객체를 표시합니다.

    • 'off'Transform 객체의 모든 객체를 숨깁니다. 보이지 않는 Transform 객체의 속성에 계속 액세스할 수 있습니다. Transform 객체의 Visible 속성을 설정해도 Transform 객체 내에 있는 객체의 Visible 속성은 변경되지 않습니다.

    자식이 캡처한 마우스 클릭에 대한 응답으로, 'on' 또는 'off'나 숫자형 값 또는 논리값 1(true) 또는 0(false)으로 지정됩니다. 값 'on'true와 동일하고 값 'off'false와 동일합니다. 따라서 이 속성의 값을 논리값으로 사용할 수 있습니다. 값은 matlab.lang.OnOffSwitchState 유형의 on/off 논리값으로 저장됩니다.

    • 'on'Transform 객체의 ButtonDownFcn 콜백을 트리거합니다. ContextMenu 속성을 정의한 경우 상황별 메뉴를 불러옵니다.

    • 'off'Transform 객체의 콜백을 트리거하지 않습니다. 대신, HitTest 속성이 'on'으로 설정되어 있고, 선조가 마우스 클릭을 캡처하도록 하는 PickableParts 속성값을 갖는 가장 가까운 선조에 대해 콜백을 트리거합니다.

    Transform 객체는 마우스 클릭을 캡처할 수 없습니다. 그러나 Transform 객체의 자식을 클릭할 경우 이 자식의 HitTest 속성이 'off'로 설정되어 있으면 자식이 이 클릭을 Transform 객체에 전달합니다.

    제한 사항

    • Transform 객체는 여러 그래픽스 객체의 부모가 될 수 있지만 동일한 좌표축의 객체만 포함할 수 있습니다.

    • 많은 플로팅 함수는 그래프를 그리기 전에 좌표축을 지웁니다(즉, axes의 자식을 제거합니다). 좌표축을 지우면 좌표축 내의 모든 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 함수를 참조하십시오.

    • Transform 객체를 Text 객체의 부모로 지정할 수 있지만 스케일링 및 회전 변환은 텍스트에 아무런 영향을 미치지 않습니다. 텍스트의 글꼴 크기와 방향을 변경하려면 TextSizeRotation과 같은 텍스트 속성을 대신 설정하십시오. 자세한 내용은 Text 속성 항목을 참조하십시오.

    • Transform 객체를 Light 객체의 부모로 지정할 수 있지만 변환은 조명의 위치에 아무런 영향을 미치지 않습니다. 광원의 위치와 방향을 수정하려면 Light 객체의 Position 속성을 대신 설정하십시오. 자세한 내용은 Light 속성 항목을 참조하십시오.

    버전 내역

    R2006a 이전에 개발됨