기하 도형 예제: 표시 객체에 행렬 변환 적용

Flash Player 9 이상, Adobe AIR 1.0 이상

DisplayObjectTransformer 샘플 응용 프로그램에서는 다음과 같이 Matrix 클래스를 사용하여 표시 객체를 변환하는 다양한 기능을 보여 줍니다.

  • 표시 객체 회전

  • 표시 객체 크기 조절

  • 표시 객체 평행 이동(위치 변경)

  • 표시 객체 기울이기

이 응용 프로그램에는 다음과 같이 행렬 변환 매개 변수를 조정할 수 있는 인터페이스가 있습니다.

사용자가 [Transform] 버튼을 클릭하면 응용 프로그램에서 적절한 변환을 적용합니다.

원본 표시 객체와 -45° 회전 및 50% 축소 효과가 적용된 표시 객체

이 샘플에 대한 응용 프로그램 파일을 가져오려면 www.adobe.com/go/learn_programmingAS3samples_flash_kr 을 참조하십시오. DisplayObjectTransformer 응용 프로그램 파일은 Samples/DisplayObjectTransformer 폴더에 있으며 이 응용 프로그램은 다음과 같은 파일로 구성됩니다.

파일

설명

DisplayObjectTransformer.mxml

또는

DisplayObjectTransformer.fla

Flash(FLA) 또는 Flex(MXML) 형식의 기본 응용 프로그램 파일입니다.

com/example/programmingas3/geometry/MatrixTransformer.as

행렬 변환을 적용하는 데 필요한 메서드가 포함된 클래스입니다.

img/

응용 프로그램에 사용되는 샘플 이미지 파일이 포함된 디렉토리입니다.

MatrixTransformer 클래스 정의

MatrixTransformer 클래스에는 Matrix 객체의 기하학적 변환을 적용하는 정적 메서드가 포함되어 있습니다.

transform() 메서드

transform() 메서드에는 다음 항목에 대한 각 매개 변수가 포함되어 있습니다.

  • sourceMatrix - 이 메서드로 변환하는 입력 행렬

  • xScale yScale - x y 비율 인수

  • dx dy - x y 평행 이동 크기(픽셀)

  • rotation - 회전 크기(도)

  • skew - 기울이기 인수(백분율)

  • skewType - 기울이기 방향( "right" 또는 "left" )

반환값은 결과 행렬입니다.

transform() 메서드는 클래스의 다음 정적 메서드를 호출합니다.

  • skew()

  • scale()

  • translate()

  • rotate()

각 메서드는 변환 효과가 적용된 소스 행렬을 반환합니다.

skew() 메서드

skew() 메서드는 행렬의 b c 속성을 조정하여 행렬을 기울입니다. 선택적 매개 변수인 unit 은 기울이기 각도를 정의하는 데 사용되는 단위를 결정하고, 필요한 경우 이 메서드는 angle 값을 라디안으로 변환합니다.

if (unit == "degrees")  
{ 
    angle = Math.PI * 2 * angle / 360; 
} 
if (unit == "gradients") 
{ 
    angle = Math.PI * 2 * angle / 100; 
}

기울이기 변환을 적용하기 위해 skewMatrix 라는 Matrix 객체를 만들어 조정합니다. 처음에는 다음과 같이 단위 행렬입니다.

var skewMatrix:Matrix = new Matrix();

skewSide 매개 변수는 기울이기 변환을 적용할 변을 결정합니다. 이 매개 변수가 "right" 로 설정되면 다음 코드에서는 행렬의 b 속성을 설정합니다.

skewMatrix.b = Math.tan(angle);

그렇지 않은 경우에는 다음과 같이 Matrix 객체의 c 속성을 조정하여 아래쪽 변이 기울어집니다.

skewMatrix.c = Math.tan(angle);

그런 다음 아래 예제와 같이 두 행렬을 연결하여 기존 행렬에 결과 기울이기가 적용됩니다.

sourceMatrix.concat(skewMatrix); 
return sourceMatrix;

scale() 메서드

다음 예제에서는 비율 인수가 백분율로 지정되어 있는 경우 scale() 메서드로 비율 인수를 조정하고 행렬 객체의 scale() 메서드를 사용하는 방법을 보여 줍니다.

if (percent) 
{ 
    xScale = xScale / 100; 
    yScale = yScale / 100; 
} 
sourceMatrix.scale(xScale, yScale); 
return sourceMatrix;

translate() 메서드

translate() 메서드는 다음과 같이 행렬 객체의 translate() 메서드를 호출하여 dx dy 평행 이동 인수를 적용합니다.

sourceMatrix.translate(dx, dy); 
return sourceMatrix;

rotate() 메서드

rotate() 메서드는 입력 회전 인수가 도 또는 그래디언트 단위로 지정되어 있는 경우 이를 라디안으로 변환한 다음, 행렬 객체의 rotate() 메서드를 호출합니다.

if (unit == "degrees") 
{ 
    angle = Math.PI * 2 * angle / 360; 
} 
if (unit == "gradients") 
{ 
    angle = Math.PI * 2 * angle / 100; 
} 
sourceMatrix.rotate(angle); 
return sourceMatrix;

응용 프로그램에서 MatrixTransformer.transform() 메서드 호출

응용 프로그램에는 사용자가 변환 매개 변수를 입력할 수 있는 사용자 인터페이스가 포함되어 있습니다. 그런 다음 표시 객체의 transform 속성의 matrix 속성과 함께 이러한 값을 다음과 같이 Matrix.transform() 메서드에 전달합니다.

tempMatrix = MatrixTransformer.transform(tempMatrix,  
    xScaleSlider.value,  
    yScaleSlider.value, 
    dxSlider.value,  
    dySlider.value, 
    rotationSlider.value, 
    skewSlider.value,  
    skewSide );

그런 다음 응용 프로그램이 표시 객체의 transform 속성의 matrix 속성에 반환값을 적용하여 변환을 트리거합니다.

img.content.transform.matrix = tempMatrix;