Main Content

makehgtform

4×4 변환 행렬(Transform Matrix) 생성

    설명

    단위 행렬

    M = makehgtform은 항등 변환 행렬을 반환합니다. 항등 변환 행렬을 Transform 객체에 적용하면 자식 객체가 원래 방향, 위치, 크기로 재설정됩니다.

    스케일링 행렬

    예제

    M = makehgtform("scale",s)Transform 객체를 스케일링하는 변환 행렬을 반환합니다.

    • s가 스칼라인 경우 변환 행렬은 x축, y축, z축을 따라 s만큼 균일하게 스케일링합니다.

    • s가 행 벡터 [sx sy sz]인 경우 변환 행렬은 x축을 따라 sx, y축을 따라 sy, z축을 따라 sz만큼 스케일링합니다.

    회전 행렬

    예제

    M = makehgtform("xrotate",r)Transform 객체를 x축을 기준으로 r 라디안만큼 반시계 방향으로 회전하는 변환 행렬을 반환합니다.

    M = makehgtform("yrotate",r)Transform 객체를 y축을 기준으로 r 라디안만큼 반시계 방향으로 회전하는 변환 행렬을 반환합니다.

    M = makehgtform("zrotate",r)Transform 객체를 z축을 기준으로 r 라디안만큼 반시계 방향으로 회전하는 변환 행렬을 반환합니다.

    예제

    M = makehgtform("axisrotate",[rx ry rz],r)Transform 객체를 축 [rx ry rz]를 기준으로 r 라디안만큼 반시계 방향으로 회전하는 변환 행렬을 반환합니다.

    평행 이동 행렬

    예제

    M = makehgtform("translate",[tx ty tz])Transform 객체를 x축을 따라 tx 단위, y축을 따라 ty 단위, z축을 따라 tz 단위만큼 평행 이동하는 변환 행렬을 반환합니다. 특정 축을 따라 평행 이동하는 것을 방지하려면 대응하는 평행 이동 거리를 0으로 지정하십시오. 예를 들어, makehgtform("translate",[0 0 5])z축을 따라서만 5단위만큼 평행 이동하는 변환 행렬을 만듭니다.

    M = makehgtform("translate",tx,ty,tz)x, y, z 평행 이동 거리를 별도의 인수로 지정합니다.

    참고

    열거된 구문에서 2개 이상의 입력 인수 조합을 사용하여 여러 변환을 지정할 수 있습니다. 예를 들어, makehgtform("xrotate",pi,"scale",4)는 4만큼 균일하게 스케일링하고 x축을 중심으로 pi 라디안만큼 회전합니다. 변환 개수와 순서를 지정할 수 있습니다. makehgtform은 이러한 변환을 역순으로 적용합니다. 지정된 변환 순서가 결과 변환 행렬에 어떠한 영향을 미치는지에 대한 자세한 내용은 여러 변환 적용하기 항목을 참조하십시오.

    예제

    모두 축소

    스케일링 변환 행렬을 사용하여 그래픽스 객체를 스케일링할 수 있습니다.

    먼저 좌표축을 만들고 뷰를 조정해 보겠습니다. 그리드 선을 표시하고 좌표축에 레이블을 지정합니다.

    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");

    구를 만듭니다.

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

    구에 변환을 적용할 수 있도록 Transform 객체를 만들고 구의 부모로 지정합니다.

    h = hgtransform;
    s.Parent = h;

    구를 50% 더 크게 스케일링하는 변환 행렬을 만듭니다. Transform 객체 hMatrix 속성을 설정하여 구에 변환 행렬을 적용합니다.

    S = makehgtform("scale",1.5);
    h.Matrix = S;

    회전 변환 행렬을 사용하여 지정된 회전 축을 기준으로 그래픽스 객체를 회전할 수 있습니다.

    먼저 좌표축을 만들고 뷰를 조정해 보겠습니다. 그리드 선을 표시하고 좌표축에 레이블을 지정합니다.

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

    Transform 객체를 만듭니다. 변환을 적용할 수 있도록 파란색 사각형을 만들고 Transform 객체를 부모로 지정합니다.

    h = hgtransform;
    r = rectangle(ax,Position=[0 10 5 10],FaceColor="b");
    r.Parent = h;
    hold on

    (rx,ry,rz)를 지정하여 회전 축을 정의합니다. 축은 원점과 이 점을 통과하는 선입니다. 선을 플로팅하여 이 선을 기준으로 하는 사각형의 회전을 시각화합니다.

    rx = 10;
    ry = 15;
    rz = 10;
    plot3(ax,[0 rx],[0 ry],[0 rz])
    hold off

    회전 축을 기준으로 사각형을 pi 라디안만큼 회전하는 애니메이션을 만듭니다. 사각형을 회전하는 변환 행렬을 정의합니다. 루프가 반복될 때마다 회전 각도를 증가시켜 이 회전 행렬을 Transform 객체에 적용합니다.

    for r=0:0.3:pi
        R = makehgtform("axisrotate",[rx ry rz],r);
        h.Matrix = R;
        drawnow
        pause(0.1)    
    end

    평행 이동 변환 행렬을 사용하여 그래픽스 객체를 평행 이동할 수 있습니다.

    먼저 좌표축을 만들고 뷰를 조정해 보겠습니다. 그리드 선을 표시하고 좌표축에 레이블을 지정합니다.

    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");

    구를 만듭니다.

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

    구에 변환을 적용할 수 있도록 Transform 객체를 만들고 구의 부모로 지정합니다.

    h = hgtransform;
    s.Parent = h;

    그런 다음 변환 행렬을 만들어 구를 x축을 따라 0.5단위, z축을 따라 0.5단위만큼 평행 이동합니다. Transform 객체 hMatrix 속성을 설정하여 구에 변환 행렬을 적용합니다.

    Txz = makehgtform("translate",[0.5 0 0.5]);
    h.Matrix = Txz;

    makehgtform을 한 번 호출하여 여러 변환을 지정할 수 있습니다. MATLAB®은 지정된 모든 변환을 결합한 변환 행렬을 반환합니다. 이 예제에서는 x축 및 y축을 기준으로 그래픽스를 회전합니다.

    먼저 좌표축을 만들고 뷰를 조정해 보겠습니다. 그리드 선을 표시하고 좌표축에 레이블을 지정합니다.

    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 객체를 만들고 배열 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)

    먼저 x축을 기준으로 회전한 다음 y축을 기준으로 회전하는 회전 행렬을 만듭니다. makehgtform 함수에 대한 단일 호출에서 여러 변환을 지정할 경우 변환은 오른쪽에서 왼쪽으로 적용됩니다. Transform 객체 hMatrix 속성을 설정하여 변환 행렬을 적용합니다.

    m1 = makehgtform("yrotate",pi/2,"xrotate",pi/2);
    h.Matrix = m1;

    두 개의 개별 회전 행렬을 만들고 서로 곱하여 동일한 변환 행렬을 얻을 수 있습니다.

    mx = makehgtform("xrotate",pi/2);
    my = makehgtform("yrotate",pi/2);
    m2 = my*mx; 
    h.Matrix = m2;

    입력 인수

    모두 축소

    스케일링 인자로, 스칼라 또는 요소를 3개 가진 행 벡터로 지정됩니다. Transform 객체를 x축, y축, z축을 따라 균일하게 스케일링하는 변환 행렬을 만들려면 스케일링 인자를 스칼라 값으로 설정하십시오. x축, y축, z축 각각을 따라 스케일링을 지정하려면 스케일링 인자를 3개의 값(sx, sy, sz)을 가진 행 벡터로 설정하십시오.

    회전 각도(단위: 라디안)로, 스칼라로 지정됩니다. 이 함수는 Transform 객체를 축을 기준으로 r 라디안만큼 반시계 방향으로 회전하는 변환 행렬을 반환합니다.

    회전 축으로, 요소를 3개 가진 행 벡터로 지정됩니다. 회전 축은 좌표축 원점과 점 (rx,ry,rz)으로 정의됩니다. 자세한 내용은 회전 축 항목을 참조하십시오.

    평행 이동 거리로, 요소를 3개 가진 행 벡터로 지정됩니다. 평행 이동 거리를 3개의 값(tx, ty, tz)으로 설정하여 각각 x축, y축, z축을 따라 평행 이동을 지정합니다.

    x 평행 이동 거리로, 스칼라로 지정됩니다. 지정된 값은 x축을 따라 평행 이동할 거리를 정의합니다.

    y 평행 이동 거리로, 스칼라로 지정됩니다. 지정된 값은 y축을 따라 평행 이동할 거리를 정의합니다.

    z 평행 이동 거리로, 스칼라로 지정됩니다. 지정된 값은 z축을 따라 평행 이동할 거리를 정의합니다.

    출력 인수

    모두 축소

    변환 행렬로, 4×4 행렬로 반환됩니다. 부모 Transform 객체의 Matrix 속성을 이 변환 행렬로 설정하여 그래픽스 객체의 변환을 수행합니다. 변환 행렬에 대한 자세한 내용은 hgtransform으로 지원되는 변환 항목을 참조하십시오.

    데이터형: double

    세부 정보

    모두 축소

    여러 변환 적용하기

    변환 작업은 현재 변환에 대해 상대적이 아니라 절대적으로 정의되므로 Transform 객체에 개별 변환들을 적용하는 경우 변환은 항상 객체의 원래 방향, 위치, 크기를 기준으로 수행됩니다. 여러 변환을 연속적으로 적용하려면 makehgtform에서 반환된 변환 행렬을 곱하십시오.

    변환 행렬을 곱할 경우 변환은 오른쪽에서 왼쪽으로 적용되기 때문에 곱셈 순서가 중요합니다. 일반적으로 다음 순서로 변환을 적용하십시오.

    1. 스케일링 변환

    2. 회전 변환

    3. 평행 이동 변환

    변환은 현재 좌표축의 원점을 기준으로 수행되기 때문에 여러 변환을 적용하는 이 순서는 Transform 객체를 평행 이동하기 전에 스케일링 및 회전의 원점을 유지합니다.

    예를 들어, Transform 객체를 회전한 다음 평행 이동하면 Transform 객체와 원점 간의 거리가 변경되기 때문에 그 반대 순서와는 다른 결과가 생성됩니다. 이 코드는 두 개의 회전과 한 개의 평행 이동을 적용하는 변환 행렬을 만듭니다.

    Rx = makehgtform("xrotate",pi/2);
    Ry = makehgtform("yrotate",pi/2);
    T = makehgtform("translate",[4 0 0]);
    C = T*Ry*Rx
    Transform 객체에 C를 적용하면 먼저 x축을 기준으로 pi/2 라디안만큼 회전한 다음 y축을 기준으로 pi/2 라디안만큼 회전하고, 마지막으로 x축을 따라 4단위만큼 평행 이동합니다. 추가 예제는 여러 변환 결합하기 항목을 참조하십시오.

    회전 축

    회전 축은 원점과 점으로 정의됩니다. 이 점은 카테시안 좌표에서 [x,y,z]로 지정됩니다. 회전 축은 좌표축의 원점과 이 점을 연결하는 선입니다.

    버전 내역

    R2006a 이전에 개발됨