2010-05-03 15 views
21

İki koordinat sisteminde bir dizi bilinen noktaya dayalı bir afine dönüşüm matrisini belirlemek için herhangi bir standart algoritma bilen var mı?Afin transformasyon algoritması

+0

Kolej günlerimi hatırlarsam, bunu bir dizi denklem kurarak ve dönüşüm için çözerek yapamaz mıydınız? Bu arada, bu senin ödev mi? – WhirlWind

+0

Bu daha http://mathoverflow.net için bir soru değil mi? – BalusC

+0

@WhirlWind Hayır, bu benim ödevim değil. Kendime bir çözüm buldum, ancak biraz "hacky" gibi görünüyor ve bazı vakaları çok iyi idare ediyor gibi görünmüyor. Standart bir algoritma arıyordum, ancak şu ana kadar başarısız oldu. Burada birinin bilen biri olup olmadığını merak ediyordum. @BalusC Bu mu? Bunun yerine oraya sormalı mıyım? Üzgünüm :) Burada biraz yeniyim. –

cevap

30

Afin dönüşümleri 2x3 matrislerle verilir. 2B girişimizi (xy) alarak, 3B vektörüne (xy 1) çarparak ve daha sonra (solda) M ile çarparak bir affin dönüşümü M gerçekleştiririz.

Eğer üç noktamız varsa (x1) için y1) (x2 y2) (x3 y3) haritalama (u1 v1) (u2 v2) (u3 v3) o zaman

[x1 x2 x3] [u1 u2 u3] 
M [y1 y2 y3] = [v1 v2 v3]. 
    [ 1 1 1] 

sadece

tersi ile sağdan çarparak M alabilirsiniz sahip
[x1 x2 x3] 
[y1 y2 y3] 
[ 1 1 1]. 

2x3 matris bir 3x3 matris tarafından sağda çarpılır bize istediğimiz 2x3 verir. (Aslında tam tersini gerekmez, ancak matris tersi varsa kullanımı kolaydır.)

Kolayca diğer boyutlara adapte. Eğer 3'ten fazla puanınız varsa en uygun kareleri en iyi şekilde isteyebilirsiniz. Bunun için tekrar sormanız gerekecek, ama biraz daha zor.

+0

Çeviriden ne haber? – jeff

+1

M'nin son sütunu çeviriyi verir. M'yi doğrusal bir harita olarak (soldaki 2x2 matrisi ile verilmiştir) ve son sütuna göre çevirerek okuyabilirsiniz. Ama bunu iki ayrı dönüşüm olarak düşünmek zorunda değilsiniz. Bir 2B noktasını dönüştürmek için, bir 3D puan yapmak için 1, sonra da M ile çarpın. Sonuç, bir seferde hem doğrusal hem de çeviri parçaları olan bir 2D vektördür. – sigfpe

+0

oh, tamam. Teşekkürler ! – jeff