Array.triangulate (三角形分割)

  1. 文法
  2. 詳細
  3. 引数
  4. 例外
  5. 戻り値

1. 文法

メンバ型
関数
メンバ所有者
global.Array インスタンス
呼び出し
instance .triangulate( w, h, mode )

2. 詳細

当該配列に格納されているノード(頂点)座標群を使用して、三角形分割を行い、三角形情報を返します。 ノード座標は x1, y1, x2, y2, x3, y3, ... のように、インターリーブされていなければなりません。 また、引数で指定した矩形領域内に収まっていなければなりません。

矩形の頂点座標は自動的に付加されますので、ユーザが指定する必要はありません。

3. 引数

w ( Integer )
矩形領域の幅を指定します。
h ( Integer )
矩形領域の高さを指定します。
mode ( Integer ) [default: tptmDelauney]
分割のアルゴリズムを指定します。デフォルトはDelauneyの分割方法です。 現バージョンでは、この引数は無視されます。

4. 例外

5. 戻り値

分割結果を配列で返します。 この配列には、分割後の三角形の数だけ要素が格納されています。 各要素は、各三角形の頂点座標と、隣接三角形の情報が格納された数値配列です。 各三角形の頂点座標は、インターリーブされた状態で格納されます。 隣接三角形の情報は、隣接する三角形の、この配列におけるインデックス番号です。

この配列イメージは下記のようになります。

[
  [ x1, y1, x2, y2, x3, y3, n1, n2, n3 ] ,  // 三角形1の情報
  [ x1, y1, x2, y2, x3, y3, n1, n2, n3 ] ,  // 三角形2の情報
  [ x1, y1, x2, y2, x3, y3, n1, n2, n3 ] ,  // 三角形3の情報
  ... ,
  [ x1, y1, x2, y2, x3, y3, n1, n2, n3 ]    // 三角形Nの情報
]

x1, y1, x2, y2, x3, y3 は三角形の頂点座標です。 n1, n2, n3 が、各辺に隣接する三角形のインデックス番号です。 隣接しない場合には -1 が格納されます。 n1, n2, n3 はこの配列(分割結果)におけるインデックス番号になっているため、隣接する三角形を再帰的に辿ることができます。

6. 例

var coords = [ 70,20, 40,50 ];
var result = coords.triangulate(100, 80);

このコードを実行すると、 result には下記の配列が格納されます。

[
 [
  real +0.0 /* +0.0 */,
  real +0.0 /* +0.0 */,
  real 0x1.8C00000000000p6 /* 99 */,
  real +0.0 /* +0.0 */,
  real 0x1.1800000000000p6 /* 70 */,
  real 0x1.4000000000000p4 /* 20 */,
  int 2,
  int 3,
  int -1
 ],
 [
  real 0x1.1800000000000p6 /* 70 */,
  real 0x1.4000000000000p4 /* 20 */,
  real 0x1.8C00000000000p6 /* 99 */,
  real 0x1.3C00000000000p6 /* 79 */,
  real 0x1.4000000000000p5 /* 40 */,
  real 0x1.9000000000000p5 /* 50 */,
  int 4,
  int 3,
  int 2
 ],
 [
  real 0x1.8C00000000000p6 /* 99 */,
  real 0x1.3C00000000000p6 /* 79 */,
  real 0x1.1800000000000p6 /* 70 */,
  real 0x1.4000000000000p4 /* 20 */,
  real 0x1.8C00000000000p6 /* 99 */,
  real +0.0 /* +0.0 */,
  int 0,
  int -1,
  int 1
 ],
 [
  real 0x1.4000000000000p5 /* 40 */,
  real 0x1.9000000000000p5 /* 50 */,
  real +0.0 /* +0.0 */,
  real +0.0 /* +0.0 */,
  real 0x1.1800000000000p6 /* 70 */,
  real 0x1.4000000000000p4 /* 20 */,
  int 0,
  int 1,
  int 5
 ],
 [
  real 0x1.8C00000000000p6 /* 99 */,
  real 0x1.3C00000000000p6 /* 79 */,
  real +0.0 /* +0.0 */,
  real 0x1.3C00000000000p6 /* 79 */,
  real 0x1.4000000000000p5 /* 40 */,
  real 0x1.9000000000000p5 /* 50 */,
  int 5,
  int 1,
  int -1
 ],
 [
  real +0.0 /* +0.0 */,
  real +0.0 /* +0.0 */,
  real 0x1.4000000000000p5 /* 40 */,
  real 0x1.9000000000000p5 /* 50 */,
  real +0.0 /* +0.0 */,
  real 0x1.3C00000000000p6 /* 79 */,
  int 4,
  int -1,
  int 3
 ]
]

このときの三角形分割イメージは下記のようになります。