方針
(1) は直線 を と書き,点と直線の距離公式をそのままプログラムにする。(2) は直線 の左辺に を代入した値の符号で同じ側か異なる側かを判定する。ただし距離が 未満なら直線上とみなすため,代入値を直線係数の長さで割ってからしきい値と比べる。方針としては,距離判定を先に行い,その後で符号の積を見る。
解答
(1)
直線 は原点と を通るので,方程式は である。したがって点 からこの直線までの距離は である。よってプログラムの残りは,この式を計算して表示すればよい。(2)
直線 は と書ける。点 をこの左辺に代入した値を とする。 と の符号が同じなら同じ側,異なれば異なる側である。ただし,直線からの距離は なので,これが より小さいときは直線上とみなす。
したがって,例えば次のようにすればよい。行100,110で点が直線上とみなされる場合を先に除いている。その後は の符号だけを見ればよい。
別解
解法2
方針
直線の向きベクトルとの行列式を使う。行列式の絶対値を方向ベクトルの長さで割れば距離となり、符号は直線のどちら側かを表す。配列を使わないBASICとして実装する。
解答
(1)
距離は2次元の行列式を使ってである。配列を使わない形ならとすればよい。
(2) とし、とおく。絶対値を で割ったものが距離で、符号が側を表す。で完成する。
総評
点と直線の距離公式,および直線の左辺の符号による半平面判定をプログラムに翻訳する問題である。所要時間は12分程度。(1) は式を正しく作れば短いが,分母の を落としやすい。(2) は「直線上とみなす」条件が距離で与えられているため,代入値そのものではなく を と比較する必要がある。符号判定を先にしてしまうと,ほぼ直線上の点を誤って同じ側・異なる側に分類するので,しきい値判定を先に置く構成が安全である。 主解法と第2解法を別々に再計算し、条件範囲、端点、等号成立条件まで照合した。