总体思路:首先将所有小班的顶点坐标提取出来,之后对每个小班的顶点坐标按顺序依次取三个点的坐标,每个点对应三角形的一个顶点,计算每两个点之间的距离,之后计算中间点的角度。计算中间点的角度通过余弦定理[4]来实现的。依次循环操作从而计算出该小班的所有顶点的角度。具体实现方法如下: 第一步,将所有小班的顶点获取出来,新建一个所有小班的顶点的图层。 第二步,遍历第一小班,依次按顺序取该小班的三个顶点POINT1、POINT2、POINT3(POINT1对应角度A,POINT2对应角度B,POINT3对应角度C)。 第三步,在等距离投影下分别计算POINT1、POINT2、POINT3之间的距离,使用每个点的坐标计算两点间的距离。 第四步,利用余弦定理计算中间点(POINT1)对应的角度A(这里为了处理的方便,计算出来的角度都和90度进行比较,所有点的角度都转换为0-90度之间。)。 第五步,依次再按顺序取该小班的三个顶点,循环执行,计算出该小班的每个顶点的角度值,之后将所有角度值更新到顶点图层中 第六步,根据用户输入的角度阈值、拐点个数等条件,提取用户需要的拐点。 上述步骤中需要特别注意的两点:1、计算点之间距离的时候一定要注意图层的投影坐标系一定要设置为等距离投影才能计算准确的距离,否则距离计算会不准确。2、观察小班的顶点矩阵数组可以发现,首尾实际为同一个点,我们取三点构成三角形时,需要注意我们只需要从数组的下标0开始循环到倒数第一个点(即数组下标为第n-1的点)就可以了。
|