高維空間點的旋轉問題?
在二維空間中,有點,要想將旋轉到所在的方向,只要先計算兩個向量之間的夾角,然後按照旋轉矩陣進行旋轉,就能將旋轉到所在的方向。
那麼,在三維情形下,比如如何將旋轉到所在的方向?更高維呢?
寫個想法拋磚引玉了.
所謂旋轉, 是指一個矩陣變換, 這裡的變換矩陣是行列式為1的正交陣.
所以題主的問題也就是: "如何求出一個行列式為1的正交陣, 使得它作用在向量上, 所得的結果和向量平行". 或者說, "如何求出一個行列式為1的正交陣, 使得它作用在的單位向量上, 得到的單位向量".
需要說明的是, 當空間的維數大於等於3時, 這樣的旋轉並不是唯一的. (可以想像以下例子, 比如要把赤道上的一點旋轉到北極去, 那麼轉到位之後, 還可以複合上一個以地軸為軸的任意的旋轉)
這事兒可以這麼做.
我們假設的單位向量為, 的單位向量為.
在n維向量空間里找一組單位正交基, 同樣地, 找一組單位正交基. 使得是兩組基中的第一個元素, 注意在選取的時候保持這兩組正交基的定向一致(行列式都為1或者都為-1).
這可以通過Gram-Schmidt方法得到. 注意在n=2的情形下, 這樣的基的選取(幾乎)是唯一的(幾乎是指只有兩種選擇, 而且這兩種選擇本質一樣, 無非是與而已); 然而在時, 選擇方式就有無窮多了.
我們的變換可以由基變換誘導, 即
.具體到題主的例子. , .我們可以取, ;
, .householder變換
剛好這學期學了計算機圖形學,可以來答一下。
你需要的是一個線性變換,可以用矩陣乘法來描述。
==================先跑個題=================
矩陣乘法的意義是什麼呢?上面這個矩陣的基本工作就是將A向量的三個正交基底(默認為正則基底Canonical Basis)
投影到
用圖像直觀描述就是(圖中看起來像坐標系,然而其實只是互相垂直的三個單位向量,坐標系始終不變)(啊啊啊右邊寫錯了(x1,x2,x3)改為(x1,y1,z1),以此類推)
對於任意一點,由於其舊坐標的定義是(這是Column Vector的定義。不要理解為空間中的向量(x,y,z)。在更general的情況下基底可以不互相正交,甚至可以不是空間向量!反正只要滿足向量空間的公理的就可以稱為向量空間,其元素就可以叫向量。比如複數空間在實數域上是一個二維向量空間,在複數域上是一個一維向量空間。在矩陣中真正參與運算的是線性組合的係數們。)
在坐標轉換之後,其新坐標則為(注意,一開始基底改變,但係數不變)
前後坐標之間的聯繫是
也就是說,坐標系變換的第一步是先把老基底(正則基底)變到新基底, 任何點用新基底的線性組合表示的係數不變,然後第二步再把係數換一換,換 回正則基底。
這就是發生在這個矩陣乘法中的那些事:
==================回到正題的分割線=================
至於題主說的旋轉,我們可以把它拆分為兩個過程:- 把正則基底的z軸旋轉到,再求反矩陣,相當於把轉回正則基底的z軸
- 再把正則基底z軸旋轉到,求矩陣
- 最後的把兩個矩陣composite一下,前面的係數是為了照顧一下模長
怎麼做呢?
第一步:很簡單,我只需要確定z軸正則基底有歸宿。另外兩個正則基底隨意,只要保證和正交就好了。然後求一下逆矩陣。作為一個orthonormal矩陣肯定是可逆的。第二步:同樣的道理,我只需要確定z軸正則基底有歸宿。
跟上面一樣,只要保證三個基底正交就好了。最後
於是乎
到此就結束了。
如有紕漏,歡迎指出。
===================延伸====================
其實如果只是保證到的轉換,那麼矩陣中的基底也不需要正交。不過這樣一來應該就不是『旋轉』,而不是這兩個點的其他點就會變形。乘一個unitary matrix
三維空間的向量旋轉需要將三維升到四維,用四元數來操作,計算機圖形學裡面的經典向量旋轉,具體的可以參考http://www.zhihu.com/question/23005815/answer/33971127
正交變換
推薦閱讀:
※matlab中for循環為什麼會慢?
※奇數階幻方構造方法的原理是什麼?
※這是用什麼演算法實現的?
※遞歸有什麼意義?
※計算機是怎樣進行開方和冪運算的?