• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:単位円上に点A(cosθ1,sinθ1)と点B(cosθ2,sinθ2)

単位円上の点と判別方法

このQ&Aのポイント
  • 単位円上に点Aと点Bがあり、円の外に点Dがあります。判別方法を教えてください。
  • プログラムで点Aから点Bへの進行方向を判定する必要があります。
  • 点Aと点Bの位置関係を考慮しつつ、スマートな判別方法をお教えください。

質問者が選んだベストアンサー

  • ベストアンサー
  • momordica
  • ベストアンサー率52% (135/259)
回答No.1

(θ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があることを示すと思います。

sak_sak
質問者

補足

回答ありがとうございます。 θ1=-90°,θ2=90°,θ3=-135°のような場合も判別できてしまえるのが不思議です。

その他の回答 (4)

  • muturajcp
  • ベストアンサー率78% (508/651)
回答No.5

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へ向かう途中

sak_sak
質問者

お礼

“剰余”を使う方法ですね。 θ1で引いてから剰余にするとことで判別が簡単になるのですね。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

「プログラムを作って」となっているのですが, 言語によっては「実数の剰余」を (言語に用意された関数によって) 計算できることがあります>#3.

sak_sak
質問者

補足

回答ありがとうございます。 現在はjavascriptで作っていますが いつかは他の言語に移植することも考えており あまり変わったやり方はしたくありません。

  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.3

#2さん 角度は実数になっているので余りの計算ではできませんね。 角度を範囲内におさめるとしたら2πずつ引いて範囲内のおさめるかatanなどをつかうか・・・

sak_sak
質問者

補足

atanというか、EXCELのATAN2のような関数でないとダメですね。 2π足さなければいけない場合もあるので、ちょっと面倒です。 実は点Cは点A,Bにおける接線の交点なので 実際上θ1とθ3、θ2とθ3は180°以上離れていないため (θ1-θ3)はsin(θ1-θ3)で代用できることは思いついたのですが 問題は(θ1-θ2)ですね。

  • momordica
  • ベストアンサー率52% (135/259)
回答No.2

#1です。 すみません。 「θ1やθ2は-π<θ1≦πや-π<θ2≦πを満たしているとは限らない」んですね。 なら、これじゃ駄目ですね。 まあ、θ1やθ2を2πで割った余りを出せば0~2πに収まる角度に変えられるとは思うんですけど、 それじゃ駄目ですか?

sak_sak
質問者

補足

回答ありがとうございます。 No.1のように簡潔に判別できるなら 角度を範囲内に収めるのを多少入れても構わないです。 0~2πでも、-π~πでも大丈夫なんですよね?

関連するQ&A

専門家に質問してみよう