使用這個問題:3D point rotation algorithm我能夠在javascript中為我的任意向量庫同化一個基本的旋轉函式。
問題是,上面的問題沒有解釋如何圍繞任何點旋轉(如軌道)
這個向量庫擴展了 Array 物件型別(我最初是從一個舊專案派生出來的,然后將它改編為我自己的專案),所以把每個向量想象成一個帶有額外方法和 getter 的陣列(你可以在這里找到完整的源代碼)
這是我用來旋轉當前向量的方法,插入一個向量作為角度(所以每個軸都可以單獨控制)
它獲取所有三個軸(俯仰、滾動、偏航)所需的余弦和正弦值,然后將它們作為三個向量存盤在一個陣列中。
最后,它相應地將每個向量乘以每個坐標。
rotate(angle) {
let cos = (angle.copy).map(val => Math.cos(angle));
let sin = (angle.copy).map(val => Math.sin(angle));
let other = [new Vector([
cos.z * cos.y,
cos.z * sin.y * sin.x - sin.z * cos.x,
cos.z * sin.y * cos.x sin.z * sin.x
]), new Vector([
sin.z * cos.y,
sin.z * sin.y * sin.x cos.z * cos.x,
sin.z * sin.y * cos.x - cos.z * sin.x
]), new Vector([
-sin.y,
cos.y * sin.x,
cos.y * cos.x
])];
let stored = point.copy;
this.map((val, i) => (other[i].mul(stored)).sum);
}
我的主要問題是,如何調整此工具以允許我圍繞 3D 空間中的任何點旋轉
uj5u.com熱心網友回復:
如果你有一個旋轉矩陣R并想v圍繞一個點旋轉一個向量a,那么結果的公式是
a R * (v-a)
如果矩陣向量乘法是從左邊開始的,這同樣適用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/395356.html
標籤:javascript 数学 向量 回转
