2009-08-11 5 views

답변

43

즉, 구조체는 다음과 같다 :

struct CATransform3D 
{ 
    CGFloat m11, m12, m13, m14; 
    CGFloat m21, m22, m23, m24; 
    CGFloat m31, m32, m33, m34; 
    CGFloat m41, m42, m43, m44; 
}; 
typedef struct CATransform3D CATransform3D; 

이 단지 4 × 4-벡터를 변환하는 데 변환 행렬이다. 임의의 수의 선형 변환을 나타내는 데 사용할 수 있습니다. 이 행렬 유형에 대해서는 this 위키 백과 문서를 참조하십시오. 이러한 요소의 대부분은 실제로 독립적으로 해석 될 수 없지만 일부는 해석 될 수 있습니다. 예를 들어, m41, m42 및 m43은 3- 공역에서의 번역을 나타냅니다. 그래서 예를 들어, 당신은이 행렬 점을 곱하면 :

[ 1 0 0 0 ] 
[ 0 1 0 0 ] 
[ 0 0 1 0 ] 
[ 1 2 3 1 ] 

는 그런 다음, + X 방향으로 1 2 개 + Y 방향으로 단위 및 + Z 방향으로 (3) 그 시점을 변환합니다. 포인트가 4 소자 (1)의이 벡터는 실제로 매트릭스를이 행렬의 형태로되어 있습니다 인 가진 4 벡터로 표현되어야 함

    [ 1 0 0 0 ] 
[ x y z 1 ] x [ 0 1 0 0 ] = [ x+1 y+2 z+3 1 ] 
        [ 0 0 1 0 ] 
        [ 1 2 3 1 ] 

노트는 위키의 문서에 설명 된 것과 다른 변환 행렬. 왜냐하면 포인트는 일반적으로 단일 열, 4 행 행렬로 표시되기 때문입니다. 그러나 Apple은이를 4 열의 단일 행 행렬로 표시합니다. 즉, 위키피디아 기사에서 볼 수있는 모든 변환 행렬은 올바르게 작동하려면 iPhone에서 사용하기 전에 옮겨야합니다.

다른 예는 스케일링 변환이다

[ 2 0 0 0 ] 
[ 0 2 0 0 ] 
[ 0 0 2 0 ] 
[ 0 0 0 1 ] 

그것은 것 이중 모든하므로 점의 좌표 (1, 2, 3)이 될 것이다 (2, 4, 6). 회전 및 원근 투영과 같은 다른 변형은 시야에 서 인식하기가 더 어렵습니다.

여기 Apple의 transforms에 대한 자세한 정보가 나와 있습니다. Apple이 이러한 행렬을 생성하기 위해 많은 유틸리티 변환을 제공합니다 (this link 참조). 그들은 실제로 CATransform3DMakeRotation 뒤에있는 수학을 논하지 않지만 this link은 수학을 논합니다.

+1

이것은 훌륭한 설명입니다. 그러나 축을 옮겨야한다고 생각합니다. X, Y 및 Z 변환 값은 m14, m24 및 m34가 아니라 m41, m42 및 m43으로 표시됩니다. –

+0

@NickLockwood 잘 잡으십시오, 그에 따라 설명을 업데이트했습니다. – Gabe

관련 문제