過去問解きまくり研究所 ホーム

平成22年度 春期 午前 問6

アルゴリズム

アルゴリズムに関する問題

指定された点が指定された多角形の内部にあるか外部にあるかを判定したい。多角形のすべての辺について,点から水平に延ばした半直線との交差回数を調べる。点 A のように交差回数が奇数回ならば内部,点 B のように交差回数が偶数回又は 0 ならば外部とする。点 C のように半直線が多角形の頂点上を通過する場合,二つの辺の端点(上端又は下端)と交差することになるが,このときの交差回数の数え方として,適切なものはどれか。ここで,多角形には水平な辺はないものとし,辺の上の点は考えない。

〔多角形と 3 つの点〕

辺1〜辺6 でできた六角形に、点A・点B・点C から右へ水平な半直線を引いた図。
   点A … 多角形の内部にある
   点B … 多角形の左外にあり、半直線が多角形を突き抜けていく
   点C … 多角形の内部にあり、右へ延ばした半直線が
          辺3 と辺4 が出会う【頂点】をちょうど通過する
答えと解説を見る

✓ これが正解アそれぞれの辺について,下端での交差は 0 回,上端での交差は 1 回とし,合計したものを交差回数とする。

解説

下端は 0 回、上端は 1 回と数えて合計します。

この内外判定は、点から右へ延ばした半直線が多角形の辺と何回交わるかを数え、奇数なら内部と決めるアルゴリズムです。半直線がちょうど頂点を通るときに困るのは、そこで出会う二つの辺に 2 種類あるからです。ひとつは半直線の上下にまたがって続く頂点で、ここでは内と外が本当に入れ替わるので合計は奇数になってほしい形です。もうひとつは山の頂きや谷の底のように二つの辺が同じ側へ戻る頂点で、内と外は入れ替わらないので合計は偶数になってほしい形です。正解は、辺ごとに下端での交差を 0 回、上端での交差を 1 回と数えて合計する規則です。またがる頂点では一方の辺にとって上端、もう一方にとって下端になるので合計 1 回の奇数、山の頂きではどちらの辺にとっても上端なので合計 2 回、谷の底ではどちらの辺にとっても下端なので合計 0 回となり、2 種類とも欲しい偶奇が得られます。端の片側だけを数に入れるこの工夫は、区間の重なりを調べるときや値を区分へ割り振るときにも同じ形で出てきます。設問が水平な辺を除き、辺の上の点を考えないと断っているのは、上端と下端を必ず決められるようにするためです。

ほかの選択肢はなぜ違うのか

この問題の用語

出典:平成22年度 春期 応用情報技術者試験 午前 問6

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)