【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

単位円上に点A(cosθ1,sinθ1)と点B(cosθ2,sinθ2)があり、円の外に点D(Rcosθ3,Rsinθ3)があります。
原点をOとして、線分ODと単位円の交点C(cosθ3,sinθ3)が、次のどちらにあるかを知りたいのです。
・点Aから円弧に沿って時計回りに点Bへ向かう途中
・点Aから円弧に沿って反時計回りに点Bへ向かう途中

プログラムを作っていて、上記のような判別をしなくてはいけなくなりました。
プログラムの都合上、θ1やθ2は-π<θ1≦πや-π<θ2≦πを満たしているとは限りません。
(-2π<θ1≦2πや-2π<θ2≦2πくらいに収まっているとは思いますが…)

なるべくスマートな判別方法をお教えください。
A,B,Cが一致することはないものとして結構です。

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

この回答への補足

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

補足日時:2010/09/02 08:38
    • good
    • 0

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へ向かう途中
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2010/09/02 16:29

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

ります>#3.

この回答への補足

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

補足日時:2010/09/02 12:28
    • good
    • 0

#2さん


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

この回答への補足

atanというか、EXCELのATAN2のような関数でないとダメですね。
2π足さなければいけない場合もあるので、ちょっと面倒です。

実は点Cは点A,Bにおける接線の交点なので
実際上θ1とθ3、θ2とθ3は180°以上離れていないため
(θ1-θ3)はsin(θ1-θ3)で代用できることは思いついたのですが
問題は(θ1-θ2)ですね。

補足日時:2010/09/02 12:13
    • good
    • 0

#1です。


すみません。
「θ1やθ2は-π<θ1≦πや-π<θ2≦πを満たしているとは限らない」んですね。
なら、これじゃ駄目ですね。

まあ、θ1やθ2を2πで割った余りを出せば0~2πに収まる角度に変えられるとは思うんですけど、
それじゃ駄目ですか?

この回答への補足

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

補足日時:2010/09/02 08:41
    • good
    • 0

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