パスワードを忘れた? アカウント作成
451276 journal

juanの日記: とあるプログラム

日記 by juan

画面上にある点aが存在する。この点を通り、y軸に対して角度θの傾きを持つ直線lが存在する。なお、θは0から360°の範囲で任意の値を取る。

平面内の任意の点bからこの直線に垂線を下ろし、その交点cと点aとの距離、および直線l上でのcから見たdの方向(適当にどっちかをプラスとして反対はマイナス)、垂線の長さと方向(cを中心としてプラスかマイナス)、これらをもとめなければいけないことになった。

適当に紙に作図してみて、三角関数で求められるかなーと考える。とりあえず点aを原点とみなしたほうが何かと楽そうだ。点aから点bに線を引いて、これがy軸と作る角度をωと置き、ω-θでlと線abが作る角度を求め、(線abの長さ)*cos(θ)で距離cdを、(ab)*sin(θ)で距離acを求める方向で考えたけど、ωとθの関係によって多くの場合が存在し、一筋縄ではいかない。
では線abを半径とする円の方程式を立て、これと直線lの方程式を連立させて交点を求め、その中間を得る方法はどうかと考える。
これだと大体二乗のルートで解いちゃうので、長さは比較的簡単に出るが、向きを判断するにはやっぱりいろいろな場合わけを考えねばならず、何も解決しないことに気づいた。

円の手法で長さを求め、線の向きを求める方法を別に考えることにする。諸悪の根源は任意の値を取りうる角度θだ。これを消せばいいのではないか?原点をaとし、直線lを座標軸と考えて計算すれば方向は点のx座標、y座標がプラスかマイナスかだけで決まる。

点bの座標(Bx,By)をアフィン変換でθだけ回転させてやることにする。
まてよ?この回転させた点で、座標(x,y)はすなわち求めたい二本の線分の長さそのものだ。
連立方程式とかいらねーじゃん。

数十行書いてまだ未完成のコードの代わりに、わずか4行のコードで目的が果たされてしまった……

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ研究家

読み込み中...