p.exterior.vert[i] = newId; } }
// now do the holes basically the same way . . . }
// the \while (!EMPTY(entering)) { nextInter = delete (entering);
SEARCH (SubjectPolygon,nextInter,ptr1); AddToOutputList (ptr1->. . .) StartPoint = ptr1->. . . ptr1 = prt1->next;
while (ptr1->. . . != StartPoint) { AddToOutputList (ptr1->. . .);
if (ptr1-> . . == INTERSECTION) ptr1 = prt1->otherList->next; else
ptr1 = ptr1->next; }
FixListForOutput(); DrawPolygon(); EmptyOutputList(); }
五,实现结论
1、裁剪窗口可以是矩形、任意凸多边形、任意凹多边形。
2、可实现被裁剪多边形相对裁剪窗口的内裁或外裁,即保留窗口内的图形或保留窗口外的图形,因此在三维消隐中可以用来处理物体表面间的相互遮挡关系。
3、裁剪思想新颖,方法简洁,裁剪一次完成,与裁剪窗口的边数无关。
4,Weiler-Atherton算法的的设计思想很巧妙,裁剪是一次完成,不象Sutherland-Hodgman多边形裁剪算法,每次只对裁剪窗口的一条边界及其延长线进行裁剪,如裁剪窗口有n条边,则要调用n次S-H算法后才能最后得出裁剪结果。