[numpy]矩陣操作
我差點把自己搞瘋。關於 dot、inner、outer、cross、* 跟我印象中的不一樣。難怪當初快被當掉…。
反正現在一切以 numpy 說了算…。
首先,平移矩陣的函式先寫出來,方便以後要用。(公式也是抄來的,所謂的齊次座標 homogeneous coordinate) http://openhome.cc/Gossip/ComputerGraphics/HomogeneousCoordinate.htm
def m_shift(vector):
a = numpy.array([1,0,0,vector[0],
0,1,0,vector[1],
0,0,1,vector[2],
0,0,0,1])
a.shape = (4,4)
m = numpy.mat(a.copy())
return a
輸入一個 array 當向量,三個數字依序表示對 x, y, z 做平移的量。
假設就每個軸平移 2 好了,m = m_shift(numpy.array([2,2,2]))
原來的點就假設為 (1,2,3),要給公式用,就取一個 array,v1 = v1 = numpy.array([1,2,3,1])。最後那個 1 是為了齊次座標而補的。
執行 dot 及 * 的結果如下:
m = [[1 0 0 2]
[0 1 0 2]
[0 0 1 2]
[0 0 0 1]]v1 = [[1]
[2]
[3]
[1]]numpy.dot(m,v1) = [[3]
[4]
[5]
[1]]m * v1 = [[1 0 0 2]
[0 2 0 4]
[0 0 3 6]
[0 0 0 1]]
就先這樣吧…。