我试图编写一个算法来对网格点的2D采样进行三角测量。这个想法类似于Delaunay三角测量,但有一些自定义规则。
为了表示顶点及其坐标,输入是0和1的稀疏2D数组。如果给定元素是顶点,则它是1,如果不是,则给定0。所以基本上如果它是1,则意味着对点进行了采样,并且三角测量需要将其包含在三角测量中;如果是0,则不应该参与三角测量。
1)与Delaunay不同,在我的例子中,所有三角形必须是水平或垂直方向的直角三角形,例如:
0 0 0 0
0 1 0 1
0 1 0 0
有一个直角三角形,可以通过连接1来形成。并且它具有垂直/水平方向,因为2个非斜边边缘是水平和垂直的。
2)没有2个三角形可以共享斜边,但如果它们共享一个不是斜边的边缘就没问题。
3)没有顶点可以是直角三角形的顶点,也可以是不同直角三角形的非顶点。换句话说,
0 1 0
0 (1) 1
0 1 0
是可以的,因为在()中标记的中心是两个直角三角形的顶点。 但在以下情况中:
0 0 0 1 1
1 0 0 1 1
可以这样做:
0 0 0 X B
A 0 0 A B
表示2个三角形(AAX和BBX),但不允许以下内容:
0 0 0 A B
A 0 0 X B
因为现在顶点" X"将是三角形A中的顶点,但在三角形B中将是非顶点。
我对如何开发此算法的任何想法/大纲感兴趣。矩阵非常大,但非常稀疏,因此算法不必太高效;任何概念上简单的方法都应该可行。输出应该是列表列表:
[[(x1a,y1a),(x1b,y1b),(x1c,y1c)], [(x2a,y2a),(x2b,y2b),(x2c,y2c)], ..., [(xNa,yNa),(xNb,yNb),(xNc,yNc)]]
表示所有N个不同三角形的3个顶点的坐标。