問題
次の(1),(2)では,それぞれ,その目的を実行するためのBASICによるプログラムの始めの部分が与えられている.方針を記述してから,プログラムの残りの部分を完成せよ.ただし,変数A(1),A(2)等には座標,等が入力されるものとする.
注意:(1)のプログラムでは配列を表すためにDIM文を使っているが,DIM文を使わないプログラムを作成してもよい.そのときは,行番号10の文は消去し,行番号20,30の文は
20 INPUT A1, A2
30 INPUT P1, P2
で置き換えるものとする.(2)についても,同様である.
(1) 座標平面上の原点と異なる点について,任意の点から直線への距離を表示すること.
10 DIM A(2), P(2)
20 INPUT A(1), A(2)
30 INPUT P(1), P(2)
(2) 点,を座標平面上の相異なる点とし,直線で平面を二分する.点,がこの直線の同じ側にあるときは1を,異なる側にあるときはを,,の少なくとも一方がこの直線上にあるときは0を表示すること.ただし,ある点と直線との距離が,与えられた正数0.00001より小さいときはその点は直線上にあるとみなすことにする.
10 DIM A(2), B(2), P(2), Q(2)
20 EPS=0.00001
30 INPUT A(1), A(2)
40 INPUT B(1), B(2)
50 INPUT P(1), P(2)
60 INPUT Q(1), Q(2)
方針
(1) は直線 を と書き,点と直線の距離公式をそのままプログラムにする。(2) は直線 の左辺に を代入した値の符号で同じ側か異なる側かを判定する。ただし距離が 未満なら直線上とみなすため,代入値を直線係数の長さで割ってからしきい値と比べる。方針としては,距離判定を先に行い,その後で符号の積を見る。
解答
(1)
直線 は原点と を通るので,方程式は である。したがって点 からこの直線までの距離は である。よってプログラムの残りは,この式を計算して表示すればよい。
(2)
直線 は と書ける。点 をこの左辺に代入した値を とする。 と の符号が同じなら同じ側,異なれば異なる側である。ただし,直線からの距離は なので,これが より小さいときは直線上とみなす。
したがって,例えば次のようにすればよい。
行100,110で点が直線上とみなされる場合を先に除いている。その後は の符号だけを見ればよい。