トピック
HIBIKI 130216

画面に平行な直線に接しているある直線があるとき、その角度を求めるにはどうすればいいでしょうか?

言葉では分かりにくいと思うので、僕をタッチして、お絵描きの方をご覧頂ければと思います。図をご用意しております。
0そうだね
プレイ済み
返信[1]
親投稿
ほしけん Hosiken
画面に並行というのは、縦まっすぐか横まっすぐ、という意味でしょうか? であれば基本的に ATAN2 で求めるのが簡単そうですね。
1そうだね
プレイ済み
返信[2]
親投稿
すぎ field2050
AC=1 BC=1 PRINT DEG(ATAN(BC,AC)) ACの長さを1,BCの長さを1としたときの角度はこれで45度とでます。
0そうだね
プレイ済み
返信[3]
親投稿
Hanzo rzsense
図を拝見する限り、画面に平行な直線とは、X軸(またはX軸に平行な直線)のことなので、ACOSを使えば角度が求められます。 「ある直線」が、(X1,Y1),(X2,Y2)の2点を通るとき、角度Aは次のようにして求められます。 DX=X2-X1:DY=Y2-Y1 A=ACOS(DX/SQR(DX*DX+DY*DY))
0そうだね
プレイ済み
返信[4]
親投稿
HIBIKI 130216
結局、ATANとACOSのどちらを使えばいいのでしょうか?
0そうだね
プレイ済み
返信[5]
親投稿
Hanzo rzsense
実は、ASINでもよいです。平行じゃない方の直線が、2点(X1,Y1),(X2,Y2)を通るとき、角度Tは次のようにして求められます。 DX=X2-X1:DY=Y2-Y1 T=ASIN(DY/SQR(DX*DX+DY*DY)) うえこうさん方式で、平行じゃない方の直線の傾きAが分かるなら、角度Tは、次の①~④のいずれの方法でも求められます。 ①T=ATAN(A) ②T=ATAN(A,1) ③T=ACOS(1/SQR(A*A+1)) ④T=ASIN(A/SQR(A*A+1)) で、結局、どれを使えばいいのか?ですが、どれでも好きな方法を選んでいただければ、と思います。SQR()を使わなくてすむ分、①か②(つまりATAN)の方がよいかも知れませんが。 ただし、ATANには次に述べるような致命的な弱点がございますので、ご注意のほどを。
0そうだね
プレイ済み
返信[6]
親投稿
Hanzo rzsense
ATANの弱点とは、原則、直角を求められないことです。なぜなら、ATANの引数は、直線の傾きであり、垂直な直線は傾き∞(無限大)だからです。無限大を引数として与えるわけには行きませんからね。ただ、前述②のATANは、引数を2つ取りますが、2つ目の引数を0にすることで、直角を求めることができます。 1つ申し上げ忘れましたが、ATAN,ACOS,ASINいずれを使う場合も、角度はラジアンという単位で得られます。もっとも、ラジアンを度数に変換するのは簡単で、T=T*180/PI()のように、180をかけて円周率で割るだけです。あるいは、他の皆さんが実施されているように、DEG()関数を使っても同じです。
0そうだね
プレイ済み
返信[7]
親投稿
すぎ field2050
どちらでもかまいませんが、ATANのほうが計算が楽です。 ちなみにこれは三角関数という考え方を使っていて高校二年ぐらいで学びます。ATAN、アークタンジェントはそこでも学ばないかもしれません。 みやさんは中3ということなので算数の先生に聞いてみるのがいいかもしれません。
0そうだね
プレイ済み
返信[8]
親投稿
マギー M191246
DEG(ATAN(DY,DX))とすると 角度が得られます。 先に傾きを計算すると、直角より大きいとき、 正確な角度が求められません。
0そうだね
プレイ済み
返信[9]
親投稿
MIKI ifconfig
asin, acos, atan(引数一つ) はいずれも値域が -πからπまでなので、 実用上は atan(引数二つ) に全く及びません。 例えば dx = -1, dy = -1 の場合を考えてください。
1そうだね
プレイ済み
返信[10]
親投稿
HIBIKI 130216
理解出来ました!皆さん、本当にありがとうございました!!
0そうだね
プレイ済み