プロが教えるわが家の防犯対策術!

VBAで2つのX,Y座標から角度を求めるにはどのようにしたら良いのでしょうか。
例えばx1=100,y1=100とx2=200,y2=200は45度、というような場合にx1,y2とx2,y2を使って45を求めたいのですが...

A 回答 (3件)

http://nkiso.u-tokai.ac.jp/phys/matsuura/lecture …
このページに書いてある「タンジェントの逆関数」があれば、角度を求められます。

つまり
kakudo = atn((x2-x1)/(y2-y1))
となります。

なお、上記だけでは-90度~90度までしか判りません。割り算なので「100/100と-100/-100」、「-100/100と100/-100」が同じ値になって区別できません。つまり、45度と225度、135度と315度の区別が付きません。

ですので、x1とx2、y1とy2のそれぞれの大小関係で場合分けし、別々に角度を求める必要があります。

但し、y1とy2が一致する時は「0で割算エラー」が出るので、atn関数は使えません。y1とy2が一致した場合はatn関数を呼ばずにx1とx2の大小関係を見て「0度」「2点が同一座標」「180度」の3通りに判定するようにします。

また、x1とx2が一致した場合、引数の「(x2-x1)/(y2-y1)」が0になってしまい、90度なのか270度なのか判らなくなります。その場合もy1とy2の大小関係を見て90度なのか270度なのか判定が必要です。

参考URL:http://nkiso.u-tokai.ac.jp/phys/matsuura/lecture …
    • good
    • 0

訂正します。


=if((x2-x1)=0,90,ATAN((y2-y1)/(x2-x1))*180/PI())

参考URL:http://www.moug.net/tech/exopr/0090016.htm
    • good
    • 0

=if((x2-x1)=0,90,=ATAN((y2-y1)/(x2-x1))*180/PI()



参考URL:http://www.moug.net/tech/exopr/0090016.htm
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています