生まれて初めてCocoaベースのアプリケーションを書いた。どうしても視覚化しなければならない部分があったので。いつも書いている部分はC++なので、Objective-C++を使ってみた。ちょっと混合させるのに癖があるといえばあるのだけれども、それでも融合させられるのは今までの部分が使えるので、とても楽。このキメラな感じがいかにもMacという感じがする。
計算幾何学で良く出てくる?ドロネー分割(領域を図のように3角形で分割する)をするアプリケーションなのだけれども、アルゴリズムが間違っているためか?、ときどき頻度で間違った答えが出る。今のところどこがどう間違っているのか、さっぱり見当がつかない。困ったな。
用いたドロネー分割のアルゴリズム。
- すべての点を含むようなsuper triangleを作成する。
- 点を一つ選び、その点が既存の三角形の外接円の内部にあるかどうかを判定する。
- 外接円内部であれば、その三角形の辺を記憶しておき、三角形を壊す。
- 3.をすべての三角形に繰り返す。
- 記憶した辺の中で他のものとかぶっているものは削除する。
- 残った辺を一つずつ取り出し、2.で選択した点をもう1点として三角形を作成する。
- 2. 〜 6.をすべての点について繰り返す。