円上の点を指定してラジアン単位の角度を取得します


14

私は円の周りを回転するダイヤルに取り組んでいます。

クリックする前に

このダイヤルを使用すると、円の任意の場所にマウスを移動して、ダイヤルの位置をクリックと同じ角度の円上の点に調整できます。たとえば、上のダイヤルから、下にピンクで表示されているスポットをクリックした場合、そのポイントの上で円上にダイヤルを移動します。

クリック後(ピンク)

半径と角度(ラジアン単位)を指定して、円上の点の位置を取得する方法を知っています。それがこの式です:

x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;

しかし、私は反対のことをやろうとしています。クリックポイントがあり、それを円上のポイント(コントロールノブが行く場所)に変えたいと思っています。このポイント(および指定された半径)を使用して、角度をラジアン単位で計算して、同じ角度でコントロールノブを円に配置しようとしています。

これを達成するために使用できる便利な式はありますか?


ポイント間の角度を取得するための式をお探しですか?
ウィリアムマリアガー

2点間の角度を取得できますか?勾配を計算することはできますが、三角形を作成し、逆三角関数を使用してこれを解決するには3番目の点が必要であると推測しました。
編集者

方法を示す回答を投稿しました。
ウィリアムマリアガー

3
ここに実際にあるのは、2つのベクトル間角度です。どちらも円の中心から始まり、同じ大きさ(円の半径)を持ちます。
マイケルハウス

その背後にある数学は、逆トリガー関数です。atanはの短縮形でありarctanatan2個々の引数を受け入れる関数であり、除算を行います。
-voithos

回答:


25

atan2関数をチェックしてください。

それはあなたの(0、0)および(x、y)との間の角度を与え、xそしてy関数の引数です。

編集:円の中心がされていない場合は(0、0)、関係なく、ただ次の操作を行いますatan2(y - cy, x - cx)


私のサークルの中心にない場合は問題になり(0,0)ますか?atan2以下の@Luisに示すように、引数をオフセットするだけだと思いますか?
編集者

引くだけで翻訳します。編集をご覧ください。
-jcora

3
-1:atan2の最初のパラメーターはy
ルイスエストラダ

2
@LuisEstradaに感謝します、私はちょうどそれを修正しました。(うまくいけば、あなたはそれを+1にするでしょう:))
jcora

+ Luis Estradaこれをネクロバンプしてすみませんが、私はあなたに感謝しなければなりませんでした。私は今から1日半プログラムをデバッグしようとしています。結局のところ、議論atan2は遅れていました!
発がん性物質


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.