xiaominmin54 2016-11-07 03:24 采纳率: 0%
浏览 1421
已采纳

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条回答 默认 最新

  • threenewbee 2016-11-07 03:27
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接