這是我實際中遇到的乙個問題,暫時考慮是萬向鎖問題:
假如給定矩陣
test_r = np.array([(
-0.8480481
,0.52991926,0
),(0.52991926
,0.8480481,0
),(0
,0,1
)])
我們如果用下面的尤拉角轉旋轉矩陣和旋轉矩陣轉尤拉角的python例程,會發現這個矩陣轉換回尤拉角,然後就轉不回來了…
def
euler_angles_to_rotation_matrix
(theta)
: r_x = np.array([[
1,0,
0],[
0, math.cos(theta[0]
),-math.sin(theta[0]
)],[
0, math.sin(theta[0]
), math.cos(theta[0]
)]])
r_y = np.array(
[[math.cos(theta[1]
),0, math.sin(theta[1]
)],[
0,1,
0],[
-math.sin(theta[1]
),0, math.cos(theta[1]
)]])
r_z = np.array(
[[math.cos(theta[2]
),-math.sin(theta[2]
),0]
,[math.sin(theta[2]
), math.cos(theta[2]
),0]
,[0,
0,1]
])r = np.dot(r_z, np.dot( r_y, r_x )
)return r
def
is_rotation_matrix
(r):
rt = np.transpose(r)
shouldbeidentity = np.dot(rt, r)
i = np.identity(
3, dtype = r.dtype)
n = np.linalg.norm(i - shouldbeidentity)
return n <1e-
6def
rotation_matrix_to_euler_angles
(r):
assert
(is_rotation_matrix(r)
) sy = math.sqrt(r[0,
0]* r[0,
0]+ r[1,
0]* r[1,
0]) singular = sy <1e-
6ifnot singular:
x = math.atan2(r[2,
1], r[2,
2]) y = math.atan2(
-r[2,0
], sy)
z = math.atan2(r[1,
0], r[0,
0])else
: x = math.atan2(
-r[1,2
], r[1,
1]) y = math.atan2(
-r[2,0
], sy)
z =0 r = x
p = y
y = z
return
[r, p, y]
找了很久,發現可用用四元數來代替尤拉角可以解決此問題,猜測是出現萬向鎖的問題。
python的話這裡推薦使用transforms3d庫
乙個ViewController對應多個Xib
比例係數開發的大概步驟 1.選著乙個尺寸作為開發設計的基準 2.制定其他螢幕的適配規則 3.特殊的適配給出具體的效果圖 例如攜程的比例係數 5 autosizescalex 1 autosizescaley 1 6 autosizescalex 1.171875 autosizescaley 1.1...
乙個Key對應多個Value
map 乙個key對應乙個value,它可以滿足大部分需求。但有時我要用到乙個key對應多個value怎麼辦?1.普通做法 map map new hashmap 2.apache commons工具包裡有個org.apache.commons.collections.map.multivaluem...
關於乙個Action對應多個Form
由於乙個action可以用多個path來訪問,所以我們可以通過在struts config.xml中配置一下action來達到乙個action來對應多個form。下面是乙個action對應多個form的 struts config.xml的配置 type com.mac.struts.form.in...