(Library) Delaunay三角形メッシュ生成

(C) Takeshi Horinouchi

LICENSE: Ruby's

概要

Delaunay の三角形分割 (Delaunay traingulation) というのは、平面上に分 布する点から三角形メッシュを生成する手法です。ゆがみの少ないメッシュを 生成するため、各三角形の外接円内にメッシュを構成する他の点が入らないよ うにします。円上に4点以上並ぶ(という一意には選びようのない)ケースを 除き、一意に決まります。この拡張ライブラリでは、基本的な逐次加点法 (incremental method)を実行します。これは頂点数 n に対し、 O(n**2) の計算量の手法です。この部分はCで書いてますので、高速です。 なお、n が非常に大きい場合向けの、 分割統治(divide and counquer)は行いません。悪しからず。

三角形を表すクラスは TriangleI と名付けてます。ちょっと変な名前で、自 分でも反省してますが、頂点に index が振ってあってその index ベースで点 を identify することから、I がついてます。

インストール

資源を展開して、トップディレクトリに cd して、次のようにします。

% ruby extconf.rb
% make
% make install

使用法

サンプルが test_trianglei.rb にあります。そこから抜粋すると、

require "narray"
require "trianglei"
px = NArray[0.0, 3.0, 1.0, 1.0, 3.5]
py = NArray[0.0, 1.0, 4.0, 5.0, 4.0]
tary = TriangleI.delaunay(px, py)

のようにすることで、tary は3角形の列を納めた配列となります。 test_trianglei.rb は、得られた結果の図示もします (dcl_001.pngが その結果です)。

dcl_001.png

更新日時:2008/02/14 11:42:29
キーワード:[拡張ライブラリ] [格子生成] [Extension library] [Grid generation]
参照: