曲線迷路

曲線迷路例 一般的にコンピュータの書く迷路は、正方形のマスを基準にしますが、曲線の迷路もできます。 以下、曲線迷路を描くプログラムを試しに作ってみました。 こういうことができるよと示すための試作で、 道の生成をあまりよく考えていないので、不具合があるかもしれませんが、勘弁してください。 試作品のため、意図的に迷路生成過程が見えるようにしておきました。

ダウンロード(ismaze6.lzh、256Kバイト)

迷路の生成の考え方は穴掘り法(道延ばし法)の延長です。 つまり、適当な起点から始まり、そこから伸ばせる限り道を伸ばしていきます。 延ばせなくなったら点を戻って、伸ばせるところから改めて延ばします。 道は、ほぼ同じ間隔の点の連続と考え、点の列を伸ばしていきます。 自然な曲線にするためには、線を延ばすときに、可能な限り、進行方向の変化角度を同じにします (プログラミング言語のLOGOのタートルグラフィックで、こんなふうに曲線を描いていました...)。 他の点に近づく方向には道を延ばせないと考えます。 この点の列をスプライン曲線を使ってさらに滑らかにして、道にします。

ほぼ同じ角度で延ばす他の点の近くには伸ばせない

近くに他の点があるかないかの判定をどうするかが、この迷路生成の1つのポイントかと思います。 ここでは近い点をグループ化し、明らかに遠い点の検査は最初からしないようにしています。 今のパソコンは早いので、いい加減な方法でもそこそこのスピードが出るようです。

点の列が出来たら、これを迷路の道、つまり2本の曲線にします。 やり方はいろいろあると思いますが、ここで使用した方法は、次の通りです。 ビットマップ(2次元配列変数)を用意します。 次に点の列から細かくスプライン曲線上の点の位置を計算し、曲線上の点を中心とした円を描きます。 円がつながって太い曲線が生成されます。 最後に太い曲線の輪郭だけを描く事で迷路の道が出来上がります。 輪郭の生成は、ビットマップの各点について、周囲の点が同一色か、そうでないかをチェックする事で行います。

道を生成

→スプライン曲線の作り方

このほかにスタートやゴールを生成する必要があります。 上でダウンロードできるプログラムは、スタートやゴールの生成は手抜きです。


迷路トップ [番目]記述内容について一切保障しません。リンクは自由に行ってかまいません。
Since 2005/8/3, Final update 2004/8/15 , Presented by Ishida So