问一个计算机形态学的编程问题
有些应用需要涉及任意多边形窗口(包括凹多边形窗口)的裁剪。魏勒-阿泽顿多边形裁剪算法正是满足这一要求的算法。
魏勒-阿泽顿也叫双边切割法。
我找了一个中国地质大学的相关教程,里面的算法流程如下:
1.在算法实现中,需要存储六个数组:裁剪多边形、裁剪窗口、交点数组、插入交点后裁剪多边形、插入交点后裁剪窗口和输出多边形。
2.因为交叉点用“in”和“out”标记,所以与交叉点相关的所有数组都应该采用结构数组类型:
结构点
{
双x;
双y;
int标志;
}交集数组,数组3,数组4;
旗帜有三种状态:
0:非交点;
1:“入口”点;
-1:“出”点。
3.寻找交点时,使用切割多边形的边来寻找切割窗口边的交点:
用于(裁剪多边形的边)
{
…;
用于(裁剪窗口的边)
{
求有效交集;放入交集数组;
…;
}
}
4.交点的顺序插入是指交点数组要排序,然后分别插入数组1和数组2的对应位置。
5.要找到“入”点和“出”点,必须根据标志找到满足条件的顶点位置。不仅要找到数组3中的“入”点和“出”点,找到后还要去数组4对应的顶点位置。阵列4的处理与上面相同。这种处理在该算法中遇到。