2016-08-26 9 views
0

ベクトル(v)を作成し、その上にrotMatrix関数を実行したいと思います。私はどのようにvector(v)で30度の関数rotMatrixを呼び出すのか分かりません。私もベクトルをプロットしています。あなたのrotMatrix機能で回転行列をベクトル+プロットに適用する

import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
sns.set_style("white") 
import math 

def rotMatrix(angle): 
    return np.array([[np.cos(np.degrees(angle)), np.arcsin(np.degrees(angle))], [np.sin(np.degrees(angle)), np.cos(np.degrees(angle))]]) 

v = np.array([3,7]) 
v30 = rotMatrix(np.degrees(30)).dot(v) 

plt.arrow(0,0,v[0],v[1], head_width=0.8, head_length=0.8) 
plt.arrow(0,0,v30[0],v30[1],head_width=0.8, head_length=0.8) 
plt.axis([-5,5,0,10]) 
plt.show() 
+0

あなたは入力の種類を確認するために 'np.cos(...) 'を調べましたか?ラジアン、度など? – hpaulj

+0

'v30 = rotMatrix(np.degrees(30))* v'を実行すると、ベクトルに回転行列を掛けることができます。 btw、degreesはラジアンから次の角度に変換するための角度です。角度は0度にしてください。 – samgak

+0

@hpaulj np.cos()はラジアンを取るため、np.degreesを使用しています。これは間違っていますか? –

答えて

0

あなたはアークサイン()関数を使用しています

は、ここに私のコードです。あなたはまた、あなた度の値はラジアン

return np.array([[np.cos(np.radians(angle)), 
         -np.sin(np.radians(angle))], 
       [np.sin(np.radians(angle)), 
         np.cos(np.radians(angle))]]) 

またはわずか

rotMatrix(30).dot(v) 

c = np.cos(np.radians(angle)) 
s = np.sin(np.radians(angle)) 
return np.array([[c, -s], [s, c]]) 

とコールにより効率的かつ可読性を向上させるために変換する必要があります)(-sin使用したいです - 罪とアークシンは非常に異なっています。

+0

ありがとうJames!時計回りに30度回転させたいのであれば、角度として-30をつけるだけですか? –

+0

はい、負の角度は反時計回りの回転を表します。 –

0

疑わしいときは、対話的なPython/numpyセッションで計算を行います。

In [23]: 30/180*np.pi  # do it yourself convsion - easy 
Out[23]: 0.5235987755982988 
In [24]: np.radians(30)  # degrees to radians - samething 
Out[24]: 0.52359877559829882 
In [25]: np.sin(np.radians(30)) # sin(30deg) 
Out[25]: 0.49999999999999994 
関連する問題