前節では, 四角形の格子を三角形に分割し, 各部分領域における z=f(x,y) の近似値および等高線の求め方について述べた. 部分領域における等高線は, この三角形の辺または頂点を端点とする直線線分となる. したがって, 等高線 z=zc の位置座標として, 連続した等高線を右側が z < zc となるようにたどっていったとき, 等高線が三角形の辺または頂点を次々と横切る点の座標を順番に求めればよい. これらの点を直線で結ぶと近似曲線が得られる.
三角形の部分領域では
等高線を平面どうしの交線で近似するので,一つの三角形を
同一レベルの等高線が2回以上横切ることはない.
そこでFigure: 5のように(i,j)番目の
格子内の4つの三角形に対して
という
名前の論理型フラグを設ける. このフラグを等高線がすでに三角形を横切った
かどうか判断するために使用し, 重複して横切るのをさける.
このフラグ名は三角形の識別名
としても用いることとし, 対応する三角形を三角形 Tm,i,j というよう
に呼ぶことにする.
また, 三角形の辺や頂点を構成する線分や格子点,
格子の中心点に対して
S1,i,j,...,S8,i,j という名前をつける.
これらは線分と点であるが便宜的にすべてセグメントと呼ぶことにする.
これをすべての格子
に対して行う.
そしてフラグ Tm,i,j は, 等高線を描きたい格子空間の境界の一つ外側
の部分にも仮想的に設けてそこで true とし, 等高線を描きたい空間の領域に対
してはすべて false を設定する.
等高線を求めるアルゴリズムのアウトラインはつぎのようになる.
ng2d では, サブルーチン ngc0a, ngc0s でフラグ Tm,i,j に対応する
作業用配列を宣言し, 1 のイニシャルセグメントを決定する手続きを担当させる.
そして 2
5 の手続きに相当するサブルーチン ngtcl を呼び出す.