特殊な形がある場合の領域の外周の線の求め方 1.プレイヤーが通った線全ての式を求める これは特殊な形がある場合にはverificationを始める時の一番最初の方の処理にしたい px1に各線の左側の点のx座標、 px2に各線の右側の点のx座標、 py1に各線の下側の点のy座標、 py2に各線の上側の点のy座標、 paに各線の傾き、 pbに各線のy切片を記録 (このpx1,px2,py1,py2,pa,pbをまとめてp軍と呼ぶ) もし式の形が一次式ではなくx=aのような形になる場合は、pa,pbには無を追加する 2.マップの外周の線を求める マップの一番右にある点を含む線を適当に選んでその線から外周の線探しスタート(この線をaとする) aの右側にある点をaRightとする aRightからaの左側の点へ向けた角度を求める(その角度をd1とする) aRightを含む線を全て出す(aを除く) 出した全ての線のaRightからもう一方の点へ向けた角度を求める その角度の中から一番d1と差が少なくd1より小さい角度を見つけて、その角度の線を次に進む線とする これを繰り返してaの線に戻ったら、マップの外周の線を求められる 3.マップの外周の線の全ての式を求める 1.と同じ手順で 求めたものは1.と同じpx1などに入れておく 4.マークが存在する領域の端の線の1つを探し出す マークが領域の中にあるということは確実にマークの真横に進んだ時どこかの線とぶつかる その線を求める ぶつかる線として考えられるのは必ずp軍に入っている線(領域の端は必ずマップの端もしくはプレイヤーが通った線だから) まずp軍の式にyにマークのy座標を代入してxを求めていく もしxがマークのx座標以下だった場合はその線は無効となる 全て求めたら、求めたxが最も最小だった線がマークから右に進んだ時に始めに当たる線だと言える 5.領域の外周を求める 2.と同じようにやっていき、一周すれば完了!
よっしゃできた!!!! あとは色々して四角作るだけです!