xiaominmin54
xiaominmin54
采纳率50%
2016-11-07 03:24 阅读 1.4k
已采纳

C++ 位移运算符 通视分析 判断两点是否可视

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#语言如何改?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-11-07 03:27

    不需要修改就能在C#用,
    相当于
    if (dcol>0) ucol = 1; else ucol = -1;
    if (drow>0) urow = ucol > 1; else urow = ucol > 0;

    点赞 1 评论 复制链接分享
  • xiaominmin54 xiaominmin54 2016-11-07 04:01

    原句是这样
    urow=((drow>0)< ucol=((dcol>0)<<1)-1;//在列方向(x)上取或-1

    点赞 评论 复制链接分享
  • xiaominmin54 xiaominmin54 2016-11-07 04:02

    urow=((drow>0)<<1)-1;//在行方向(y)上取或-1

    
    
    点赞 评论 复制链接分享

相关推荐