GeoGebra中有 Delaunay三角网命令,可以根据点列作出三角网,但作出来的图形是轨迹,不便于进一步使用,本文旨在提取出三角网中各三角形。
A = (-3.96295, 2.11481)
B = (-1.54313, 2.90919)
C = (1.1464, 2.52577)
D = (3.05969, -0.23008)
E = (0.98896, -3.39859)
F = (-1.63927, -4.1948)
G = (-4.45459, -3.5173)
H = (-6.25215, -0.54963)
l1 = {A, B, C, D, E, F, G, H}
g1 = Delaunay三角网(l1)
我们主要讨论凸多边形,点是随意点的,形成的三角网如上,它只是轨迹,我们的目标是把这些三角形分离出来。
先找出这些三角形外心吧,我们利用三角网的孪生兄弟Voronoi图命令:
g2 = Voronoi图(l1)
l2 = 最前元素(g2, 长度(g2))
l3 = 条件子列(abs(x(A)) < 6, A, l2)
l4 = 互异(l3)
l5 = 升序排列(l4)
我们把 Voronoi图轨迹得到的点限定在一定范围,就可以确定外心点列,这里限定范围作了简化,实际过程中,可以根据点列l1中点横向坐标或者纵坐标最大最小值确定范围的。剔除重复元素,我们得到了外心点列并从左到右排列了一下,便于后续找出的三角形也按此排列。
l6 = 映射(距离(m, l1), m, l5) 让每个外心在l1中找一个最近点,因为三角网中的三角形外接圆不会包含其它 点,这个找出的距离就为我们找到构成三角形其它两点提供了参数)
m1 = 映射(序列((距离(b, l1(i)), i), i, 1, 长度(l1)), b, l5) (列出每个外心与l1中每个点的距离)
l8 = 序列(条件子列(x(W) ≟ l6(i), W, m1(i)), i, 1, 长度(l6)) (找出另两个点,并附带上序号)
m2 = y(l8) (提取出每个三角形的点在l1中的序号,序号由l8附带生成的)
m3 = 序列(序列(l1(m2(i, j)), j, 1, 3), i, 1, 长度(m2)) (根据序号,在l1中把各点提取出来)
l7 = 映射(多边形(m), m, m3)
至此,我们就得到了三角网中各三角形了,我们还可以把它们单列出来:
l9 = 序列("A" + (m) + "=Element(l7," + (m) + ")", m, 1, 长度(l7))
执行(l9)
最后对A1、A2.........分别着色就行了。
A = (-3.96295, 2.11481)
B = (-1.54313, 2.90919)
C = (1.1464, 2.52577)
D = (3.05969, -0.23008)
E = (0.98896, -3.39859)
F = (-1.63927, -4.1948)
G = (-4.45459, -3.5173)
H = (-6.25215, -0.54963)
l1 = {A, B, C, D, E, F, G, H}
g1 = Delaunay三角网(l1)
我们主要讨论凸多边形,点是随意点的,形成的三角网如上,它只是轨迹,我们的目标是把这些三角形分离出来。
先找出这些三角形外心吧,我们利用三角网的孪生兄弟Voronoi图命令:
g2 = Voronoi图(l1)
l2 = 最前元素(g2, 长度(g2))
l3 = 条件子列(abs(x(A)) < 6, A, l2)
l4 = 互异(l3)
l5 = 升序排列(l4)
我们把 Voronoi图轨迹得到的点限定在一定范围,就可以确定外心点列,这里限定范围作了简化,实际过程中,可以根据点列l1中点横向坐标或者纵坐标最大最小值确定范围的。剔除重复元素,我们得到了外心点列并从左到右排列了一下,便于后续找出的三角形也按此排列。
l6 = 映射(距离(m, l1), m, l5) 让每个外心在l1中找一个最近点,因为三角网中的三角形外接圆不会包含其它 点,这个找出的距离就为我们找到构成三角形其它两点提供了参数)
m1 = 映射(序列((距离(b, l1(i)), i), i, 1, 长度(l1)), b, l5) (列出每个外心与l1中每个点的距离)
l8 = 序列(条件子列(x(W) ≟ l6(i), W, m1(i)), i, 1, 长度(l6)) (找出另两个点,并附带上序号)
m2 = y(l8) (提取出每个三角形的点在l1中的序号,序号由l8附带生成的)
m3 = 序列(序列(l1(m2(i, j)), j, 1, 3), i, 1, 长度(m2)) (根据序号,在l1中把各点提取出来)
l7 = 映射(多边形(m), m, m3)
至此,我们就得到了三角网中各三角形了,我们还可以把它们单列出来:
l9 = 序列("A" + (m) + "=Element(l7," + (m) + ")", m, 1, 长度(l7))
执行(l9)
最后对A1、A2.........分别着色就行了。