2009-08-11 11 views

cevap

43

Bu yapı aşağıdaki gibidir:

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; 

Bu sadece bir 4x4 4-vektörler dönüştürmek için kullanılmış matrisi olup. Herhangi bir sayıda doğrusal dönüşümü temsil etmek için kullanılabilir. Bu matris türünde this wikipedia makalesine bakın. Bu elemanların çoğu gerçekten bağımsız olarak yorumlanamaz, ancak bazıları olabilir. Örneğin m41, m42 ve m43, 3-uzayda bir çeviriyi temsil eder. Yani, örneğin, bu matris tarafından bir noktaya çarpma durumunda:

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

Sonra, + X yönünde 1 ile 2 + Y yönünde birimleri ve + Z yönünde 3 bu noktayı çevirecektir. 4üncü elemanı 1. Ayrıca, bu vektör, aslında bir matris kendisi ve bu matrisin biçimi olduğuna dikkat olmak 4 vektör olarak temsil edilmesi gerektiğini

    [ 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 ] 

Not Ara makalesinde tarif edilenden farklı dönüşüm matrisleri üzerine. Bunun nedeni, bir noktanın genellikle tek bir sütun, 4 satır matrisi ile temsil edilmesidir, ancak Apple bunları 4 sütun, tek satır matrisleri olarak temsil eder. Bu, wikipedia makalesinde gördüğünüz herhangi bir dönüştürme matrisinin, doğru şekilde çalışması için iPhone'da kullanılmadan önce dönüştürülmesi gerektiği anlamına gelir.

Başka bir örnek bir ölçekleme transformudur:

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

Bu olacak çift bütün böylece noktasının koordinatları, (1, 2, 3) olacaktır (2, 4, 6). Döndürmeler ve perspektif projeksiyonları gibi diğer dönüşümler de görünürde daha zordur.

İşte Apple'dan transforms üzerine daha fazla bilgi olduğunu. Bu matrisleri üretmek için Apple tarafından birtakım faydalı dönüşümler sağlanmıştır, bkz. this link. Aslında CATransform3DMakeRotation'ın arkasındaki matematiği tartışmıyorlar, ancak this link bunu yapıyor.

+1

Bu harika bir açıklamadır, ancak eksenlerinizi dönüştürdüğünüzü düşünüyorum. X, Y ve Z çeviri değerleri m14, m42 ve m43 değil, m14, m24 ve m34 ile temsil edilir. –

+0

@NickLockwood iyi yakalama, açıklamayı buna göre güncelledim. – Gabe

İlgili konular