📄 fbt.cpp
字号:
#include <stdio.h>
#include <math.h>
struct Sor{ //定义炮点数据结构
int Source;
int Record_Num;
int Channel_one;
int Before_gap;
int After_gap;
int Last_trace;
int Pattern;
int Near_Station;
int Shot_Depth;
int Uphole_Time;
int X_Coordinate;
int Y_Coordinate;
int Z_Coordinate;
int Refr_Static;
int Time_Break;
int Datum_Static;
int Time_Corr;
int Pick_Flag;
int Low_Station;
int High_Station;
int Branch_Pt1;
int Branch_Pt2;
int Branch_Pt3;
int Branch_Pt4;
int Branch_Pt5;
int Branch_Pt6;
int Branch_Pt7;
int Tomography_Static;
int Delay_Time1;
int Delay_Time2;
int Delay_Time3;
int Layer1Elv;
int Layer2Elv;
int Layer3Elv;
int Int_Datum;
int Final_Datum;
int Extra3;
int Extra4;
int Extra5;
int Extra6;
int Extra7;
int Extra8;
int Delta_X;
int Delta_Y;
int Extra11;
int MESA_flag;
int Line_Number;
int Extra14;
int Extra15;
int Water_Depth;
int Weather_Vel;
int Layer1Vel;
int Layer2Vel;
int Layer3Vel;
};
struct Sta{ //定义检波点数据结构
int Station;
int X_Coordinate;
int Y_Coordinate;
int Z_Coordinate;
int Status;
int Refr_Static;
int Datum_Elv;
int Datum_Static;
int Corr_Vel;
int Uphole_Time;
int Shot_Depth;
int Time_Corr;
int Layer1Velocity;
int Layer2Velocity;
int Layer3Velocity;
int Layer4Velocity;
int DelayTime1;
int DelayTime2;
int DelayTime3;
int Layer1Elv;
int Layer2Elv;
int Layer3Elv;
int Int_Datum;
int Extra2;
int Extra3;
int Extra4;
int Extra5;
int Extra6;
int Extra7;
int Extra8;
int Extra9;
int Delta_X;
int Delta_Y;
int MESA_flag;
int Line_Number;
int Tomography_Static;
int Extra15;
int Water_Depth;
int Extra16;
int Extra17;
int Extra18;
int Extra19;
};
struct Ffbt{ //定义炮点数据结构
int Record_Num;
int fbt[2560];
};
void main()
{
int Ns;
struct Sor SSource;
struct Sta SStation[2560];
struct Ffbt Fbt;
struct Sta SStationtmp; //定义检波点数据数组
int Pattern[2560];//定义关系文件
int Record_Num,k,sinline,sinline0;//定义关系文件
int Rnum,Snum,i,tempi;
Rnum=878,Snum=7104;
FILE *infile_sor,*infile_sta,*infile_fbt,*infile_pat,*outfile_Record1,*outfile_Record2,*outfile_Records;
infile_sor=fopen("FFQ117.sor","rb");
infile_sta=fopen("FFQ117.sta","rb");
infile_fbt=fopen("FFQ117.fbt","rb");
infile_pat=fopen("FFQ117.pat","rb");
outfile_Record1=fopen("FFQ1171.txt","w");
outfile_Record2=fopen("FFQ1172.txt","w");
outfile_Records=fopen("FFQ117s.txt","w");
for(Record_Num=9;Record_Num<=9;Record_Num++)
{
fseek(infile_fbt, 0, SEEK_SET);
fseek(infile_sta, 0, SEEK_SET);
fseek(infile_sor, 0, SEEK_SET);
fseek(infile_pat, 0, SEEK_SET);
(SSource.Source)=99999;
i=0;
SSource.Pattern=0;
while(SSource.Pattern!=Record_Num)
{
fread(&SSource,sizeof(SSource),1,infile_sor);
i++;
}
fseek(infile_fbt, sizeof(Fbt)*(i-1), SEEK_SET);
fread(&Fbt,sizeof(Fbt),1,infile_fbt);
fseek(infile_pat, sizeof(Pattern)*(Record_Num-1), SEEK_SET);
fread(&Pattern,sizeof(Pattern),1,infile_pat);
tempi=0;
SStationtmp.Station=0;
while(SSource.Channel_one!=SStationtmp.Station)
{
fread(&SStationtmp,sizeof(SStationtmp),1,infile_sta);
tempi++;
}
for(i=0;Pattern[i]>=0&&i<2560;i++)
{
fseek(infile_sta, sizeof(SStation[i])*(Pattern[i]+tempi-1), SEEK_SET);
fread(&SStation[i],sizeof(SStation[i]),1,infile_sta);
}
Ns=i;
/////////////////////////////////////////////////////////////////////////////
int mint,sline1[8],sline2[8],line[8];
mint=99999999;
k=0;
line[0]=2275,line[1]=2283,line[2]=2291,line[3]=2299,line[4]=2307,line[5]=2315,line[6]=2323,line[7]=2331;
for(i=0;i<Ns;i++)
{
if(int(SStation[i].Station*0.0001)==line[k])
{
if(mint>Fbt.fbt[i]&&Fbt.fbt[i]>0)
{mint=Fbt.fbt[i];sline1[k]=SStation[i].Station;}
if(mint>=Fbt.fbt[i]&&Fbt.fbt[i]>0)
{mint=Fbt.fbt[i];sline2[k]=SStation[i].Station;}
}
else
{
k++;
mint=99999999;
}
}
sinline=0;
for(i=0;i<8;i++)
{
sinline=sinline+sline1[i]-int(sline1[i]*0.0001)*10000+sline2[i]-int(sline2[i]*0.0001)*10000;
}
sinline=sinline/16;
//////////////////////////////////////////////////////////////////////////////
///////////////////////////////////通过插值拟合办法求出中心点////////////////////
int ii=0,i1,i2,nline,sline[8];
float a[1000],b[1000],a1,b1,a2,b2;
k=0;
for(i=0;i<Ns;i++)
{
if(int(SStation[i].Station*0.0001)!=line[k])
{
nline=ii;
a1=0;
a2=0;
b1=0;
b2=0;
i1=0;
i2=0;
for(ii=0;ii<nline;ii++)
if((a[ii]<0&&a[ii+1]<0)&&(abs(a[ii]/(a[ii+1]+0.001)-1))<0.3)
{
i1++;
a1=a1+a[ii];
b1=b1+b[ii];
}
else if((a[ii]>0&&a[ii+1]>0)&&(abs(a[ii]/(a[ii+1]+0.001)-1))<0.3)
{
i2++;
a2=a2+a[ii];
b2=b2+b[ii];
}
a1=a1/i1;
b1=b1/i1;
a2=a2/i2;
b2=b2/i2;
sline[k]=int((b2-b1)/(a1-a2));
k++;
printf("%f %f %d %d %d %d\n",a1,a2,k,sline[k],i1,i2);
ii=0;
}
if(int(SStation[i].Station*0.0001)==line[k])
{
a[ii]=(Fbt.fbt[i+1]-Fbt.fbt[i]);
b[ii]=(Fbt.fbt[i+1]+Fbt.fbt[i]-a[ii]*((SStation[i].Station-int(SStation[i].Station*0.0001)*10000)*2+1))*0.5;
ii++;
}
}
nline=ii;
a1=0;
a2=0;
b1=0;
b2=0;
i1=0;
i2=0;
for(ii=0;ii<nline;ii++)
if((a[ii]<0&&a[ii+1]<0)&&(abs(a[ii]/a[ii+1]-1))<0.2)
{
i1++;
a1=a1+a[ii];
b1=b1+b[ii];
}
else if((a[ii]>0&&a[ii+1]>0)&&(abs(a[ii]/a[ii+1]-1))<0.3)
{
i2++;
a2=a2+a[ii];
b2=b2+b[ii];
}
a1=a1/i1;
b1=b1/i1;
a2=a2/i2;
b2=b2/i2;
sline[k]=int((b2-b1)/(a1-a2));
ii=0;
sinline0=0;
for(i=0;i<8;i++)
{
sinline0=sinline0+sline[i];
}
sinline0=sinline0/8;
/////////////////////////////////////////////////////////////////////////////////
for(k=0;k<Ns;k++)
{
//fprintf(outfile_Record,"%d %d %d %d %d\n",SStation[k].Station,SStation[k].X_Coordinate,SStation[k].Y_Coordinate,SStation[k].Z_Coordinate,Fbt.fbt[k]);
fprintf(outfile_Record1,"%d %d %d\n",int((SStation[k].Station)*0.0001),SStation[k].Station-int((SStation[k].Station)*0.0001)*10000,Fbt.fbt[k]);
if(Fbt.fbt[k]>0)
fprintf(outfile_Record2,"%d %d %d\n",int((SStation[k].Station)*0.0001),SStation[k].Station-int((SStation[k].Station)*0.0001)*10000,Fbt.fbt[k]);
}
fprintf(outfile_Records,"%d %d %d %d\n",int((SSource.Source)*0.0001),SSource.Source-int((SSource.Source)*0.0001)*10000,sinline,sinline0);
printf("%d %d %d\n",SSource.Source,sinline,sinline0);
}
fclose(infile_sor);
fclose(infile_sta);
fclose(infile_fbt);
fclose(infile_pat);
fclose(outfile_Record1);
fclose(outfile_Record2);
fclose(outfile_Records);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -