定义:
st 超级三角形(包含所有其他顶点三角形)
open 待确认的三角形集合
close已经确定的delaunay三角形集合
edge 边的集合
伪码:
找到超级三角形, 初始化open
st放入open
初始化 close = [];
初始化 edge = [];
each vertices:
初始化 edge (清空 edge)
each open:
点在三角形外接圆外部 & 右侧
将此三角形存入 close
open 删除此三角形
continue
点在三角形外接圆外部
continue
//剩下则在内部
当前三角形边存入 edge
open delete 此三角形
edge删除相同边(eg:边a === 边b, 那么a和b都要删除)
用当前点与edge内剩下的所有边组成新三角形,加入open
合并 close & open => close
过滤close中顶点含有st顶点的三角形
end
注意:
因为用到数组较多,当把数组A头当形参时,临时函数中对该数组A的操作会影响A,eg:
var open = [1, 2, 3];
function asmn(a){
a.splice(2, 1);
}
asmn(open); // open => [1, 2]
edge删除相同边,不是相同的留下一条,而是出现相同,两条都要删除,eg:
var edge = [1, 0, 2, 1, 2, 1, 1, 0, 3, 1]
remove(edge);
//edge => [3, 1]
超级三角形,运用相似三角形原理时,st尽量大一些