bool GTTerrainAnalysis::__isVisible(GTRaster2D* source, int row0, int col0, float elevation0, int row1, int col1)
{
//获取两点的实际高度
float elevation1=source->GetValue(row1,col1);
int drow,dcol,urow,ucol,row,col,epss;
//计算在行列方向上的增量
drow=row1-row0;
dcol=col1-col0;
urow=((drow>0)<
ucol=((dcol>0)<
row=row0,col=col0;
epss=0;//累加误差
drow=(int)fabs(drow*1.0f);
dcol=(int)fabs(dcol*1.0f);
//记录视线高程
float viewElev=0,terrainElev=0;
if(dcol>drow)
{
for (col=col0;col!=col1;col+=ucol)
{
terrainElev=source->GetValue(row,col);
epss+=drow;
if(source->isNoData(terrainElev))
{
if((epss<=dcol)
{
row+=urow;
epss-=dcol;
}
}
else
{
if(col1!=col0)
{
viewElev=(elevation1-elevation0)*(col-col0)/(col1-col0)+elevation0;
}
else
{
viewElev=(elevation1-elevation0)*(row-row0)/(row1-row0)+elevation0;
}
if(viewElev
{
return false;
}
else
{
epss+=drow; //****************修改处
if((epss=dcol)
{
row+=urow;
epss-=dcol;
}
}
}
}
}
else
{
for (row=row0;row!=row1;row+=urow)
{
terrainElev=source->GetValue(row,col);
if(source->isNoData(terrainElev))
{
epss+=dcol; //***************修改处
if((epss<<1)>=drow)
{
col+=ucol;
epss-=drow;
}
}
else
{
if(row1!=row0)
{
viewElev=(elevation1-elevation0)*(row-row0)/(row1-row0)+elevation0;
}
else
{
viewElev=(elevation1-elevation0)*(col-col0)/(col1-col0)+elevation0;
}
if(viewElev<terrainElev)
{
return false;
}
else
{
epss+=dcol; //***************修改处
if((epss<<1)>=drow)
{
col+=ucol;
epss-=drow;
}
}
}
}
}
return true;
}
想知道
urow=((drow>0)<
ucol=((dcol>0)<<1)-1;//在列方向(x)上取或-1
是什么意思?改成C#语言如何改?