簡體   English   中英

如何在 Javascript 中圍繞任意原點旋轉任意點

[英]How can I rotate an arbitrary point around an arbitrary origin in Javascript

使用這個問題: 3D 點旋轉算法我能夠為 javascript 中的任意向量庫同化基本旋轉 function。

問題是,上面的問題沒有解釋如何圍繞任何點旋轉(如軌道)

這個向量庫擴展了 Array object 類型(我最初是從一個舊項目中派生出來的,然后將它改編為我自己的項目) ,所以將每個向量想象成一個帶有額外方法和 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 空間中的任何點旋轉

如果你有一個旋轉矩陣R並且想要圍繞點a旋轉一個向量v ,那么結果的公式是

a + R * (v-a)

如果矩陣向量乘法是從左邊開始的,這同樣適用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM