const int MAXPOLYV = 50
const int MAXH = 10;
結構點2D
{float x,y;
};
typedef Point2D頂點[max vert];
enum VerType = {Polygon,Intersection };
typedef結構ClipListRec * ClipPtr
struct ClipListRec
{ int Vindex
ClipPtr next
VerType類;
浮動t;
ClipPtr otherList
}
結構多邊形
{ int nVertex
int vert[MAXPOLYV];
ClipPtr列表;
}
結構多邊形
{多邊形外部;
int numHoles
多邊形孔洞[MAXH];
}
GenPolygon Sub,Clip
int進入[MAXVERT],退出[max vert];
頂點V;
int num vertex = 0;//垂直數組的大小
int clip poly[max vert];//剪輯多邊形
int read point();
CIN & gt;& gtinXCIN & gt;& gtinY
if(num vertex & lt;最大垂直)
{ V[numVertex]。x = inX
V[numVertex]。y = inY
idNo = numVertex
num vertex++;
}
其他
idNo =-1;
返回idNo
}
void readPolygon (GenPolygon p)
CIN & gt;& gtp . exterior . nvertex;
for(I = 0;我& ltp . exterior . nvertex;i++)
{ newId = read point();
if(newId & lt;0)
錯誤
其他
{ insertAtRear (p.exterior.list,newId);
p . exterior . vert[I]= newId;
}
}
//現在用基本相同的方法打孔
。。。
}
//然後“主”程序循環將是(偽代碼)
而(!空(進入))
{ nextInter = delete(輸入);
SEARCH (SubjectPolygon,nextInter,ptr 1);
AddToOutputList(ptr 1-& gt;。。。)
start point = ptr 1-& gt;。。。
ptr 1 = PRT 1-& gt;接下來;
while(ptr 1->;。。。!=起點)
{ AddToOutputList(ptr 1-& gt;。。。);
if(ptr 1->;。。==交集)
ptr 1 = PRT 1-& gt;其他列表-& gt;接下來;
其他
ptr 1 = ptr 1-& gt;接下來;
}
FixListForOutput();
draw polygon();
EmptyOutputList();
}