#2
by usao » 8年前
オフトピック
「思いついただけ」の話なので,信ぴょう性は慎重に判断してください.
そんな話ではダメだと思われる場合には無視していただいて構いません.
(※1)
「移動前の座標(x0,y0)」と,
「(何も移動を阻害するものが無い場合に)移動後としたい目標地点座標(x1,y1)」
とを結ぶ線分上の,「壁に当たらない」範囲のうち,最も(x1,y1)に近い位置(x',y') を求めれば,
とりあえずそこまでは動いていい.
↓
(※2)
「そのままこれ以上進んだら,どのように壁に当たってしまうのか」という情報から,
残りの移動に関して,目標地点(x1,y1)を修正することができるはず.
例えば,X方向に問題があるなら,目標地点を(x',y1)に修正するとか.
↓
(※3)
(x0,y0) ← (x',y')
(x1,y1) ← 目標地点修正結果
として更新し,(※1)に戻る.(それ以上進めなくなるまで繰り返し.)
…とかだとどうでしょうか.
[offtopic]「思いついただけ」の話なので,信ぴょう性は慎重に判断してください.
そんな話ではダメだと思われる場合には無視していただいて構いません.[/offtopic]
(※1)
「移動前の座標(x0,y0)」と,
「(何も移動を阻害するものが無い場合に)移動後としたい目標地点座標(x1,y1)」
とを結ぶ線分上の,「壁に当たらない」範囲のうち,最も(x1,y1)に近い位置(x',y') を求めれば,
とりあえずそこまでは動いていい.
↓
(※2)
「そのままこれ以上進んだら,どのように壁に当たってしまうのか」という情報から,
残りの移動に関して,目標地点(x1,y1)を修正することができるはず.
例えば,X方向に問題があるなら,目標地点を(x',y1)に修正するとか.
↓
(※3)
(x0,y0) ← (x',y')
(x1,y1) ← 目標地点修正結果
として更新し,(※1)に戻る.(それ以上進めなくなるまで繰り返し.)
…とかだとどうでしょうか.