- ベストアンサー
単位円上の点と判別方法
- 単位円上に点Aと点Bがあり、円の外に点Dがあります。判別方法を教えてください。
- プログラムで点Aから点Bへの進行方向を判定する必要があります。
- 点Aと点Bの位置関係を考慮しつつ、スマートな判別方法をお教えください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
(θ1-θ2)*(θ2-θ3)*(θ3-θ1) の符号を調べればいいのではないですか? もし正であれば θ1<θ2<θ3 または θ2<θ3<θ1 または θ3<θ1<θ2 つまり、点Aから円弧に沿って時計回りに点Bへ向かう途中にCがあることを示し、 逆に負であれば θ1<θ3<θ2 または θ2<θ1<θ3 または θ3<θ2<θ1 つまり、点Aから円弧に沿って反時計回りに点Bへ向かう途中にCがあることを示すと思います。
その他の回答 (4)
- muturajcp
- ベストアンサー率78% (508/651)
A(cosθ1,sinθ1),B(cosθ2,sinθ2),C(cosθ3,sinθ3) 実数xに対して int[x]=max{n|nは整数,n≦x} θ_2=θ2-θ1-2π*int[(θ2-θ1)/(2π)] θ_3=θ3-θ1-2π*int[(θ3-θ1)/(2π)] とすると、C は θ_2<θ_3のとき 点Aから円弧に沿って時計回りに点Bへ向かう途中 θ_2>θ_3のとき 点Aから円弧に沿って反時計回りに点Bへ向かう途中
お礼
“剰余”を使う方法ですね。 θ1で引いてから剰余にするとことで判別が簡単になるのですね。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「プログラムを作って」となっているのですが, 言語によっては「実数の剰余」を (言語に用意された関数によって) 計算できることがあります>#3.
補足
回答ありがとうございます。 現在はjavascriptで作っていますが いつかは他の言語に移植することも考えており あまり変わったやり方はしたくありません。
- aurumnet
- ベストアンサー率43% (51/117)
#2さん 角度は実数になっているので余りの計算ではできませんね。 角度を範囲内におさめるとしたら2πずつ引いて範囲内のおさめるかatanなどをつかうか・・・
補足
atanというか、EXCELのATAN2のような関数でないとダメですね。 2π足さなければいけない場合もあるので、ちょっと面倒です。 実は点Cは点A,Bにおける接線の交点なので 実際上θ1とθ3、θ2とθ3は180°以上離れていないため (θ1-θ3)はsin(θ1-θ3)で代用できることは思いついたのですが 問題は(θ1-θ2)ですね。
- momordica
- ベストアンサー率52% (135/259)
#1です。 すみません。 「θ1やθ2は-π<θ1≦πや-π<θ2≦πを満たしているとは限らない」んですね。 なら、これじゃ駄目ですね。 まあ、θ1やθ2を2πで割った余りを出せば0~2πに収まる角度に変えられるとは思うんですけど、 それじゃ駄目ですか?
補足
回答ありがとうございます。 No.1のように簡潔に判別できるなら 角度を範囲内に収めるのを多少入れても構わないです。 0~2πでも、-π~πでも大丈夫なんですよね?
補足
回答ありがとうございます。 θ1=-90°,θ2=90°,θ3=-135°のような場合も判別できてしまえるのが不思議です。