Constructive Solid Geometry representations

久しぶりに書く気になった。
とにかく生きた心地がしないというか一つ試練を与えられた気分だ。
女房もそうだろう。
とにかく明日は退院できるというので気分が楽になったというのがある。
 
ということで少し(というかだいぶ間があいたけど)CSGだ。
前回も少し書いたけどソリッドの集合演算は難しい。
もっともこの難しいというのは少し補足が必要だろう。
まず、ソリッドの集合演算自体は理論的に明確である。少なくとも感覚的には。
実際、書物やその他文献でも如何にも「こうすれば出来るんだよ」と書いて終わる。
しかし、実装してみると嘘だとわかる。
最初に直面するのはソリッド同士が接触するような微妙な問題、数値計算誤差による位相崩壊。
 
幾多の試練を乗り越えないと安定的かつ頑強なソリッドの集合演算は実現しない。
 
下の図は結構意地悪なケース。1000個のキューブをランダムに与えてUnion(和)をとった例。
イメージ 1
各キューブは常に軸並行に生成しているので頻繁に微妙なケースに出くわすがそれをうまく解いている。
次の例は3次元の回転を入れた例。
イメージ 2
 
まぁ、こうやって絵を載せてもなんかインチキしたのでは?と言われても仕方が無い。
ちゃんとUnion(和)されているのだが、なにもせずに表示しても同じ絵になってしまうのが残念だ。