📄 testdlg.cpp
字号:
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
// if(pGrid[gridX+1][gridY+1].used == false)
// pGrid[gridX+1][gridY+1].used = true;
pGrid[gridX+1][gridY+1].density++;
break;
}
break;
case 4: //5 neighbors
if(nNghCheckResult == 8)
{
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
break;
}
if(nNghCheckResult == 2)
{
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
break;
}
if(nNghCheckResult == 1)
{
// if(pGrid[gridX-1][gridY].used == false)
// pGrid[gridX-1][gridY].used = true;
pGrid[gridX-1][gridY].density++;
break;
}
if(nNghCheckResult == 3)
{
// if(pGrid[gridX-1][gridY].used == false)
// pGrid[gridX-1][gridY].used = true;
pGrid[gridX-1][gridY].density++;
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
// if(pGrid[gridX-1][gridY+1].used == false)
// pGrid[gridX-1][gridY+1].used = true;
pGrid[gridX-1][gridY+1].density++;
break;
}
if(nNghCheckResult == 9)
{
// if(pGrid[gridX-1][gridY].used == false)
// pGrid[gridX-1][gridY].used = true;
pGrid[gridX-1][gridY].density++;
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
// if(pGrid[gridX-1][gridY-1].used == false)
// pGrid[gridX-1][gridY-1].used = true;
pGrid[gridX-1][gridY-1].density++;
break;
}
break;
case 8: //5 neighbors
if(nNghCheckResult == 8)
{
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
break;
}
if(nNghCheckResult == 2)
{
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
break;
}
if(nNghCheckResult == 4)
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
break;
}
if(nNghCheckResult == 6)
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
// if(pGrid[gridX+1][gridY+1].used == false)
// pGrid[gridX+1][gridY+1].used = true;
pGrid[gridX+1][gridY+1].density++;
break;
}
if(nNghCheckResult == 12)
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
// if(pGrid[gridX+1][gridY-1].used == false)
// pGrid[gridX+1][gridY-1].used = true;
pGrid[gridX+1][gridY-1].density++;
break;
}
break;
case 5: //3 neighbors
if(nNghCheckResult == 8)
{
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
break;
}
if(nNghCheckResult == 1)
{
// if(pGrid[gridX-1][gridY].used == false)
// pGrid[gridX-1][gridY].used = true;
pGrid[gridX-1][gridY].density++;
break;
}
if(nNghCheckResult == 9)
{
// if(pGrid[gridX-1][gridY].used == false)
// pGrid[gridX-1][gridY].used = true;
pGrid[gridX-1][gridY].density++;
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
// if(pGrid[gridX-1][gridY-1].used == false)
// pGrid[gridX-1][gridY-1].used = true;
pGrid[gridX-1][gridY-1].density++;
break;
}
break;
case 6: //3 neighbors
if(nNghCheckResult == 2)
{
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
break;
}
if(nNghCheckResult == 1)
{
// if(pGrid[gridX-1][gridY].used == false)
// pGrid[gridX-1][gridY].used = true;
pGrid[gridX-1][gridY].density++;
break;
}
if(nNghCheckResult == 3)
{
// if(pGrid[gridX-1][gridY].used == false)
// pGrid[gridX-1][gridY].used = true;
pGrid[gridX-1][gridY].density++;
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
// if(pGrid[gridX-1][gridY+1].used == false)
// pGrid[gridX-1][gridY+1].used = true;
pGrid[gridX-1][gridY+1].density++;
break;
}
break;
case 9: //3 neighbors
if(nNghCheckResult == 8)
{
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
break;
}
if(nNghCheckResult == 4)
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
break;
}
if(nNghCheckResult == 12)
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
// if(pGrid[gridX][gridY-1].used == false)
// pGrid[gridX][gridY-1].used = true;
pGrid[gridX][gridY-1].density++;
// if(pGrid[gridX+1][gridY-1].used == false)
// pGrid[gridX+1][gridY-1].used = true;
pGrid[gridX+1][gridY-1].density++;
break;
}
break;
case 10: //3 neighbors
if(nNghCheckResult == 2)
{
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
break;
}
if(nNghCheckResult == 4)
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
break;
}
if(nNghCheckResult == 6)
{
// if(pGrid[gridX+1][gridY].used == false)
// pGrid[gridX+1][gridY].used = true;
pGrid[gridX+1][gridY].density++;
// if(pGrid[gridX][gridY+1].used == false)
// pGrid[gridX][gridY+1].used = true;
pGrid[gridX][gridY+1].density++;
// if(pGrid[gridX+1][gridY+1].used == false)
// pGrid[gridX+1][gridY+1].used = true;
pGrid[gridX+1][gridY+1].density++;
break;
}
break;
}//end switch
}//end for
//计算密度量度,此过程可以利用前面的count变量简化。先计算总数量,再计算平均密度。空格子不包含在内!
double nAvgDensity = 0;
int num=0;
for(i=0;i<m_IntervalNum;i++)
{
for(j=0;j<m_IntervalNum;j++)
{
// pGrid[i][j].groupID = -1;
if(pGrid[i][j].used == true)
{
nAvgDensity = (nAvgDensity*num + pGrid[i][j].density)/(num + 1);
num++;
}
}
}
m_DensityLevel = nAvgDensity*m_CoefDensity/log10(m_IntervalNum*m_IntervalNum); //也许这里面的参数是点的个数而不是网格的个数
// m_DensityLevel = nAvgDensity;
// m_DensityLevel = nAvgDensity*m_CoefDensity/log10(count);
m_avgDens.Format("%f",nAvgDensity);
m_dl.Format("%d",m_DensityLevel);
UpdateData(FALSE);
//test
/*
for(i=0;i<m_IntervalNum;i++)
{
for(j=0;j<m_IntervalNum;j++)
{
if(pGrid[i][j].used == true)
if(pGrid[i][j].density > nAvgDensity)
count++;
}
}
*/
// m_cellNum.Format("%d",count);
// UpdateData(FALSE);
delete dataBuf; //到此为止,不在需要点的数组了
//group assignment
for(i=0;i<m_IntervalNum;i++) //过滤掉单元密度小于密度量度的网格
{
for(j=0;j<m_IntervalNum;j++)
if(pGrid[i][j].used == true)
{
// if(pGrid[i][j].density <= m_DensityLevel || pGrid[i][j].realNum < (pGrid[i][j].density/9))//不知道<=会不会让网格的数量再减少一些,
if(pGrid[i][j].density <= m_DensityLevel)
{
pGrid[i][j].used = false; //精度是不是会受到影响
count--;
}
}
}
m_cellNum.Format("%d",count);
UpdateData(FALSE);
int nGroupNum=0;
// int nGridNumInGroup[1000]; //记录每一组中包含网格的个数。其中[0]元素用于存放所存聚簇的个数,聚簇的id范围从1~999。
//假设最大支持999个聚簇,每一个下标对应的是group的ID
// memset(nGridNumInGroup,0x00,sizeof(int)*1000);
//////////////////////////////////////////////////////////////////////////
int nMaxDens,nGroupID;
bool nUsedTab = false; //用于判断used=true的所有邻居的groupID是否全为0
for(i=0;i<m_IntervalNum;i++)
{
for(j=0;j<m_IntervalNum;j++)
{
if(pGrid[i][j].used == true)
{
nCheckResult = CheckCondition(i,j);
nUsedTab = false;
nMaxDens = nGroupID = 0;
switch(nCheckResult) {
case 0: //check 8 neighbors
while (true) {
if(pGrid[i-1][j-1].used == true) //1
{
if(pGrid[i-1][j-1].groupID ==0) nUsedTab = true;
else {
nUsedTab = false;
break;
}
}
if(pGrid[i][j-1].used == true) //2
{
if(pGrid[i][j-1].groupID == 0) nUsedTab = true;
else{
nUsedTab = false;
break;
}
}
if(pGrid[i+1][j-1].used == true) //3
{
if(pGrid[i+1][j-1].groupID == 0) nUsedTab = true;
else{
nUsedTab = false;
break;
}
}
if(pGrid[i-1][j].used == true) //4
{
if(pGrid[i-1][j].groupID == 0) nUsedTab = true;
else{
nUsedTab = false;
break;
}
}
if(pGrid[i+1][j].used == true) //5
{
if(pGrid[i+1][j].groupID == 0) nUsedTab = true;
else{
nUsedTab = false;
break;
}
}
if(pGrid[i-1][j+1].used == true) //6
{
if(pGrid[i-1][j+1].groupID == 0) nUsedTab = true;
else{
nUsedTab = false;
break;
}
}
if(pGrid[i][j+1].used == true) //7
{
if(pGrid[i][j+1].groupID == 0) nUsedTab = true;
else{
nUsedTab = false;
break;
}
}
if(pGrid[i+1][j+1].used == true) //8
{
if(pGrid[i+1][j+1].groupID == 0) nUsedTab = true;
else{
nUsedTab = false;
break;
}
}
break;
}//end while
if(pGrid[i][j].groupID == 0 && nUsedTab == true)
{//used=true的所有邻居,如果其groupID也为0时执行这一部分
// pGrid[i][j].groupID = ++nGridNumInGroup[0];
pGrid[i][j].groupID = ++nGroupNum;
pGrid[i-1][j-1].groupID = pGrid[i][j].groupID;
pGrid[i][j-1].groupID = pGrid[i][j].groupID;
pGrid[i+1][j-1].groupID = pGrid[i][j].groupID;
pGrid[i-1][j].groupID = pGrid[i][j].groupID;
pGrid[i+1][j].groupID = pGrid[i][j].groupID;
pGrid[i-1][j+1].groupID = pGrid[i][j].groupID;
pGrid[i][j+1].groupID = pGrid[i][j].groupID;
pGrid[i+1][j+1].groupID = pGrid[i][j].groupID;
}else{
if(pGrid[i-1][j-1].used == true && pGrid[i-1][j-1].groupID != 0) //1
{
nMaxDens = pGrid[i-1][j-1].density;
nGroupID = pGrid[i-1][j-1].groupID;
}
if(pGrid[i][j-1].used == true && pGrid[i][j-1].groupID != 0) //2
{
if(nMaxDens < pGrid[i][j-1].density)
{
nMaxDens = pGrid[i][j-1].density;
nGroupID = pGrid[i][j-1].groupID;
}
}
if(pGrid[i+1][j-1].used == true && pGrid[i+1][j-1].groupID != 0) //3
{
if(nMaxDens < pGrid[i+1][j-1].density)
{
nMaxDens = pGrid[i+1][j-1].density;
nGroupID = pGrid[i+1][j-1].groupID;
}
}
if(pGrid[i-1][j].used == true && pGrid[i-1][j].groupID != 0) //4
{
if(nMaxDens < pGrid[i-1][j].density)
{
nMaxDens = pGrid[i-1][j].density;
nGroupID = pGrid[i-1][j].groupID;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -