- 积分
- 568
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-14
- 最后登录
- 1970-1-1
|
发表于 2016-3-7 08:14:51
|
显示全部楼层
//获得强度Z在高度Height上的信息
CrossPoint *crpoint[25];
for(int i=0;i<25;i++)//可统计25层
{
crpoint[i] = new CrossPoint;
memset(crpoint[i],0,sizeof(CrossPoint));
}
int iPointID=0;
for(i=LayerNumber-1;i>=0;i--)
{
if(RawFilehead->ObservationInfo.LayerInfo[i].ZbinNumber!=0)
{
int BinNumber = RawFilehead->ObservationInfo.LayerInfo[i].ZbinNumber;
float BinWidth = float(RawFilehead->ObservationInfo.LayerInfo[i].ZBinWidth/10000.0);//单位km
float Angle = float(RawFilehead->ObservationInfo.LayerInfo[i].SwpAngles/100.0);//单位度
float SinAngle = (float)sin(Angle*3.1415926/180);
for(int j=0;j<BinNumber;j++)
{
//经过地球曲率的计算 转换成km单位 //第一个格点有距离的
float RealHeight = float(RawFilehead->SiteInfo.Height/1000000.0+(float)((j+1)*BinWidth*SinAngle)+(float)((j+1)*BinWidth*(j+1)*BinWidth)/17008.0);
if(RealHeight>Height/1000.0)//
{
crpoint[iPointID]->cLayer = i;
crpoint[iPointID]->BinWidth = BinWidth;
crpoint[iPointID]->BinNumber = BinNumber;
crpoint[iPointID]->StartBin = j-1; //取前一点
crpoint[iPointID]->HLength = float(BinWidth*j*cos(Angle*3.1415926/180));
crpoint[iPointID]->SinAngle = (float)sin(Angle*3.1415926/180);
crpoint[iPointID]->CosAngle = (float)cos(Angle*3.1415926/180);
iPointID++;
break;//已经统计到点了,退出j循环
}
}
if(j==BinNumber)//该层没有相交点,则以下的层都不会有相交点的,以该层的最后一点最为结束
{
crpoint[iPointID]->cLayer = i;
crpoint[iPointID]->BinWidth = BinWidth;
crpoint[iPointID]->BinNumber = BinNumber;
crpoint[iPointID]->StartBin = BinNumber-1; //
crpoint[iPointID]->HLength = float(BinWidth*BinNumber*cos(Angle*3.1415926/180));
crpoint[iPointID]->SinAngle = (float)sin(Angle*3.1415926/180);
crpoint[iPointID]->CosAngle = (float)cos(Angle*3.1415926/180);
iPointID++;
break;//退出i循环
}
}
}
if(iPointID<1)//只有一个交点,不好插值,退出
{
for(i=0;i<25;i++)//可统计25层
{
delete crpoint[i];
}
return 0;
}
其实你要做的就是CappI,上面的程序你可以参考 |
|