2017-05-03 22 views
2

私は赤と緑のLEDが前面と背面にそれぞれ取り付けられたロボットを持っています。私はどの方向にgreenled - redLedベクトルが指されているかのようにロボットの頭の方向を計算したいと思う。2点間の反時計回り角度を計算します

下の画像の1と2のマークが同じ角度、すなわち反時計回りに45度、ポイント3が225度になるように、どのようにコード化できますか?

enter image description here

私は次のスクリプトを使用しますが、それは私に間違った結果を与える:

def headDirectionAngle(redLEDCoords, greenLEDCoords, referenceVector): 
    greenRedLEDVector = np.array(greenLEDCoords) - np.array(redLEDCoords) 
    angle = np.math.atan2(np.linalg.det([referenceVector,greenRedLEDVector]),np.dot(referenceVector,greenRedLEDVector)) 
    return np.degrees(angle) 
referenceVector = np.array([0,240]) 

はどのように進めるべきか。助けてくれてありがとう。

+0

このベクターの目標は何ですか? –

答えて

1

numpyが付いていない基本に戻る。

atan2はすでにあなたに反時計回りの角度を与えるが、-180と180の間であなたは360を追加し、0と360の間の角度を得るためにモジュロ360を計算することができます。

from math import atan2, degrees 

def anti_clockwise(x,y): 
    alpha = degrees(atan2(y,x)) 
    return (alpha + 360) % 360 

print(anti_clockwise(480, 480)) 
# 45.0 
print(anti_clockwise(-480, -480)) 
# 225.0 

xだけの違いでなければなりません緑色LEDと赤色LEDの間のX座標。 yも同じです。

+0

atan2は、水平軸に角度を与えます。ベクトルの角度を計算するためにそれを更新する方法はありますか? – deathracer

+0

@deathracer:両方のベクトルの横軸を計算し、その差を計算することができます。 –

関連する問題