2013-01-06 20 views
5

Bir sürü izometrim var [R | t] dönüşüm matrisleri, yani 3D bükülmez dönüşümlerdir. Şu anda, örneğin kompakt formda temsil edilen Eigen Affine transformations olarak saklıyorum. Eigen::AffineCompact3d, kalan son satırı [0 0 0 1] kaydetmez.Eigen'de Kompakt izometrik dönüşüm matrisi nasıl temsil edilir?

Ayrıca Transform<double, 3, AffineCompact, Isometry> yazım hatası olduğunu tahmin eden bir Eigen::Isometry3d olduğunu biliyorum.

İzometri'den sonra, ters dönüşüm, genel afin tersine göre çok daha ucuzdur (transpoze). Ayrıca, inverse() işlevini affine_mat.inverse(Eigen::Isometry);

kullandığımda bir ipucu iletebileceğimi de biliyorum. Ancak, her zaman el ile bir ipucu aktarmadan izometrik ters davranışı elde etmek istiyorum. Başka bir deyişle, bilmek istiyorum, Eigen::IsometryCompact3d davranışını çoğaltmanın en iyi yolu nedir, ki bu da Eigen API'sinde şaşırtıcı bir şekilde mevcut değildir.

cevap

1

İzometreleri göstermek için şu anda twists kullanıyorum. Bu parametrelendirme bir 6 eleman vektörü ile tarif edilebilir. Standart homojen matris formülasyonuna geri ve ileri dönüşümü yapmak için log() ve exp() 'e dayalı bir çift fonksiyona ihtiyacınız olacaktır (bu nedenle dönüştürme işlemi yavaş olacaktır).

Bu formül, iki formül arasında ileri geri gitme konusunda performans kısıtlaması yoksa (veya nadiren yapıyorsanız) veya bükülme özelliklerinden yararlanmak için (örneğin sayısal eniyileme)

+0

Evet, genellikle bir Lie grubu temsiline sahip olmak güzel. Ama benim durumumda çok sayıda vektörün dönüşümünü yapıyorum ve matris temsili benim için en iyisi. Eigen yazarlarının bir şekilde bu şeyi kaçırdığını düşünüyorum. – iNFINITEi

İlgili konular