Rotasyon matrislerinizi türetmek için kullanılan tüm kanonik rotasyonel formüller, başlangıç noktası etrafında rotasyon içindir. Bu dönüşü belirli bir noktaya uygulamak istiyorsanız, önce başlangıç noktasını dengelemeniz - ya da eşdeğer olarak, etrafında döndürmek istediğiniz nokta başlangıç noktasında olacak şekilde nesneyi hareket ettirmeniz gerekir.
Önce 2D durumu düşünün, çünkü daha basittir ve teknik ölçeklendirir. Kökeni merkez alan 2 genişliğinde bir küpünüz varsa ve merkeziyle yaklaşık 45 derece döndürmek istiyorsanız, bu 2D döndürme matrisinin önemsiz bir uygulaması olacaktır .
Ancak bunun yerine, sağ üst köşesinde (konumunda bulunur 1,1
) döndürmek isterseniz, önce köşeyi başlangıç noktasında olacak şekilde çevirmeniz gerekir. Bu bir çeviri ile gerçekleştirilebilir -1,-1
. Sonra nesneyi daha önce olduğu gibi döndürebilirsiniz, ancak bunu geri çevirerek takip etmeniz gerekir 1,1
. Yani genel olarak, yaklaşık noktanın R
dönmesi için dönme matrisine ulaşmak için :r
P
R = translate(-P) * rotate(r) * translate(P)
nerede translate
ve rotate
kanonik çeviri / rotasyon matrisleridir. Olduğu gibi, bu da rotasyona bir eksen sağlamak zorunda kalmadan istisnai olarak 3D'ye ölçeklenir - her zaman kanonik X, Y veya Z ekseni rotasyon matrislerini her zaman seçebilirsiniz, ancak bu donuk olurdu. Rasgele eksen açısı döndürme matrisini kullanmak isteyeceksiniz . R
3D finaliniz şu şekilde:
R = translate(-P) * rotate(a,r) * translate(P)
burada a
dönme eksenini temsil eden bir birim vektördür ve P
şimdi model alanında dönme noktasını temsil eden bir 3B noktadır.
O sırada da, kuaterniyonlar dönüştürülen olabilir için ve gelen Eğer yolu yani başlığı senin birleştirme yapabileceği şekilde, matris temsilleri. Ya da her şeyi matris olarak bırakabilirsiniz (kuaterniyonların aklı başında bir şekilde enterpolasyon yapmak daha kolay, ancak ihtiyacınız olup olmadığı size kalmış gibi bazı güzel avantajlara sahiptir).
Ayrıca:
Bu yüzden kuyruğunu yerel kökenli olmayan bir vektör etrafında dönen olarak görüyorum.
Kesin olarak konuşmak gerekirse, vektörler pozisyonları bir başlangıç noktasının yer değiştirmeleri olarak düşünerek temsil etmek için kullanılabilirken, vektörlerin pozisyonları yoktur, bu yüzden birini görselleştirmek biraz alışılmadık bir durumdur.