![](/img/trans.png)
[英]How can I rotate any shape or point on an HTML5 canvas around an arbitrary point?
[英]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.