⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hausdorff.txt

📁 hausdorff距离的VC程序实现
💻 TXT
字号:
void BaseStruct::GetTopologyObjs(CList<BaseStruct *, BaseStruct *> *pBaseList,CList<ZBXY*, ZBXY*>& objs)
{
	int i;
	POSITION pos,temp, posTemp;
	BaseStruct *pBaseStruct;
	ZBXY* zb, *zbTemp;
	double x, y, FirstX, FirstY, EndX, EndY;
	CArray<POSITION,POSITION> posArray;
	pos = pBaseList->GetHeadPosition();
	if (tc[0]!='A')//||tc[1]!='A')----les  070403  防止出现tc=AT不能铺染的情况
		return;
	while (pos!=NULL)
	{
		pBaseStruct = pBaseList->GetNext(pos);
		if ((pBaseStruct->left)==ysh || (pBaseStruct->right)==ysh)
		{
			temp = pBaseList->Find(pBaseStruct);
			posArray.Add(temp);
		}
	}
	if(posArray.GetSize()<=0)
	{
		return;
	}
	//--------------les--070418------------
	//调试居民地数据时候发现“死机”现象后修改的程序
	int count;
	count = posArray.GetSize();
	ZBXY *FirstPt;
	ZBXY *EndPt; 
	BOOL bFlag = FALSE;
	for(i=0; i<count; i++)
	{
		BaseStruct *pBaseStru = pBaseList->GetAt(posArray.GetAt(i));
		FirstPt = pBaseStru->GetFirstPt();
		EndPt = pBaseStru->GetEndPt();
		if(FirstPt->X==EndPt->X && FirstPt->Y==EndPt->Y && (pBaseStru->left==1
			||pBaseStru->right==1))
		{
			bFlag = TRUE;
			posTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetHeadPosition();
			while (posTemp!=NULL)
			{
				zbTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetNext(posTemp);
				objs.AddTail(zbTemp);
			}
			break;
		}
		else
			continue;
	}
	if(bFlag)
	{
		return;
	}
	//--------------------------------------
	if ((pBaseList->GetAt(posArray.GetAt(0)))->left == ysh)
	{
		posTemp = (pBaseList->GetAt(posArray.GetAt(0))->CoorList).GetHeadPosition();
		while (posTemp!=NULL)
		{
			zbTemp = (pBaseList->GetAt(posArray.GetAt(0))->CoorList).GetNext(posTemp);
			objs.AddTail(zbTemp);
		}
		zb = pBaseList->GetAt(posArray.GetAt(0))->GetEndPt();
		x = zb->X;
		y = zb->Y;
	}
	else
	{
		posTemp = pBaseList->GetAt(posArray.GetAt(0))->CoorList.GetTailPosition();
		while (posTemp!=NULL)
		{
			zbTemp = pBaseList->GetAt(posArray.GetAt(0))->CoorList.GetPrev(posTemp);
			objs.AddTail(zbTemp);
		}
		zb = pBaseList->GetAt(posArray.GetAt(0))->GetFirstPt();
		x = zb->X;
		y = zb->Y;
	}
	int countFlag = 1;
	int delFlag = 0;
	while (posArray.GetSize()!=1)
	{
		for (i=1; i<posArray.GetSize(); i++)
		{
			FirstX = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->X;
			FirstY = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->Y;
			EndX = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->X;
			EndY = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->Y;
			if ((x == FirstX && y == FirstY) || (x == EndX && y == EndY))
			{
				if (x == EndX && y == EndY)
				{
					posTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetTailPosition();
					while (posTemp!=NULL)
					{
						zbTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetPrev(posTemp);
						objs.AddTail(zbTemp);
					}
					zb = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt();
					x = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->X;
					y = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->Y;
					delFlag = i;
					countFlag++;
				}
				else
				{
					posTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetHeadPosition();
					while (posTemp!=NULL)
					{
						zbTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetNext(posTemp);
						objs.AddTail(zbTemp);
					}
					zb = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt();
					x = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->X;
					y = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->Y; 
					delFlag = i;
					countFlag++;
				}
				if (countFlag == 1)
					//posArray.RemoveAt(i-1);/////
					posArray.RemoveAt(0);
				else
					posArray.RemoveAt(delFlag);
				break;
			}
			
		}	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -