📄 info3d.h
字号:
#include "stdio.h"
#include "math.h"
void swapb(char *buf, short size)
{
char tmp;
switch (size) {
case 2:
tmp=buf[0]; buf[0]=buf[1]; buf[1]=tmp;
break;
case 4:
tmp=buf[0]; buf[0]=buf[3]; buf[3]=tmp;
tmp=buf[1]; buf[1]=buf[2]; buf[2]=tmp;
break;
case 8:
tmp=buf[0]; buf[0]=buf[7]; buf[7]=tmp;
tmp=buf[1]; buf[1]=buf[6]; buf[6]=tmp;
tmp=buf[2]; buf[2]=buf[5]; buf[5]=tmp;
tmp=buf[3]; buf[3]=buf[4]; buf[4]=tmp;
break;
default:
break;
}
return;
}
void ibm_to_float(long from[], long to[], long n)
{
long fconv, fmant, ii, t;
for (ii=0;ii<n;++ii) {
fconv = from[ii];
if (fconv)
{
fmant = 0xffffff& fconv; //尾数
t = (long)((0x7f000000L& fconv) >> 24) - 63L;//指数
t<<=2;
while (!(fmant&0x800000L)) {--t; fmant <<= 1; }
fmant&=0x7fffffL;
fconv = (0x80000000 & fconv) | ((t + 127) << 23) | fmant;
//0x80000000 & fconv Leftmost,符号位
}
to[ii] = fconv;
}
return;
}
void topc(float *xyz,long num)
{
char *buf;
short size=4;
long i,*p;
p=(long*)xyz;
for(i=0;i<num;i++) {buf=(char *)p; swapb(buf,size);p++;}
ibm_to_float((long*)xyz,(long*)xyz,num);
}
void iline(LPCSTR sgyname,float *xyz,long nx,long ny,long nz,long prono)
{
FILE *f1;
long i,k;
short token;
float *p1,xmax,t;
p1=(float *)xyz;
f1=fopen(sgyname,"rb");
fseek(f1,3224L,0);
fread(&token,2,1,f1);
if(prono<1) prono=1;
k=3600L+(prono-1)*(240+4L*nz)*ny;
fseek(f1,k,0);
for(i=0;i<ny;i++)
{
fseek(f1,240L,1);
fread(p1,4L*nz,1,f1);
p1=p1+nz;
}
fclose(f1);
if(token>255) topc(xyz,ny*nz);
xmax=0.0;
for(i=0;i<nz*ny;i++)
{
t=(float)fabs(xyz[i]);
if(xmax<t) xmax=t;
}
if(xmax>0) for(i=0;i<nz*ny;i++) xyz[i]/=xmax;
}
void xline(LPCSTR sgyname,float *xyz,long nx,long ny,long nz,long prono)
{
FILE *f1;
long i,k,l;
short token;
float *p1,xmax,t;
p1=(float *)xyz;
f1=fopen(sgyname,"rb");
fseek(f1,3224L,0);
fread(&token,2,1,f1);
k=3600L+(prono-1)*(240+4L*nz)+240;
l=(240+4L*nz)*(ny-1)+240;
fseek(f1,k,0);
for(i=0;i<nx;i++)
{
fread(p1,4L*nz,1,f1);
p1=p1+nz;
if(i<nx-1) fseek(f1,l,1);
}
fclose(f1);
if(token>255) topc(xyz,nx*nz);
xmax=0.0;
for(i=0;i<nx*nz;i++)
{
t=(float)fabs(xyz[i]);
if(xmax<t) xmax=t;
}
if(xmax>0) for(i=0;i<nx*nz;i++) xyz[i]/=xmax;
}
void TimeSlice(CString sgyname,float *xyz,long nx,long ny,long nz,long prono)
{
float *p2,xmax,t,*tt,*p,xmin ;
long i,j;
FILE *f;
short token;
f=fopen(sgyname,"rb");
fseek(f,3224,0);
fread(&token,2,1,f);
fseek(f,3600L,0);
tt=new float[ny*nz];
p2=(float *)xyz;
for(i=0;i<nx;i++)
{
p=tt;
for(j=0;j<ny;j++)
{
fseek(f,240,1);
fread(p,nz*4L,1,f);
p+=nz;
}
p=tt;
for(j=0;j<ny;j++)
{
*p2++=p[prono];
p+=nz;
}
}
delete tt;
fclose(f);
if(token>255) topc(xyz,nx*ny);
xmax=xyz[0];
xmin=xyz[0];
for(i=0;i<nx*ny;i++)
{
if(xmax<xyz[i]) xmax=xyz[i];
if(xmin>xyz[i]) xmin=xyz[i];
}
if(xmax!=xmin)
{
t=(xmax-xmin)/255;
for(i=0;i<nx*ny;i++) xyz[i]=(xmax-xyz[i])/t;
}
for(i=0;i<nx*ny;i++) xyz[i]=255-xyz[i] ;
}
void LayerSlice(CString sgyname,int *stime,float *xyz,long nx,long ny,long nz)
{
float *p1;
float *p2,xmax,t,*tt,*pp,xmin ;
long i,j;int *p;
FILE *f;
short token;
p1=xyz;
f=fopen(sgyname,"rb");
fseek(f,3224,0);
fread(&token,2,1,f);
fseek(f,3600L,0);
p2=(float *)xyz;
p=stime;
tt=new float[1L*nz*ny];
for(i=0;i<nx;i++)
{
pp=tt;
for(j=0;j<ny;j++)
{
fseek(f,240,1);
fread(pp,nz*4,1,f);
pp+=nz;
}
pp=tt;
for(j=0;j<ny;j++)
{
*p1++=pp[*p++];
pp+=nz;
}
}
delete tt;
fclose(f);
if(token>255) topc(xyz,nx*ny);
xmax=xyz[0];
xmin=xyz[0];
for(i=0;i<nx*ny;i++)
{
if(xmax<xyz[i]) xmax=xyz[i];
if(xmin>xyz[i]) xmin=xyz[i];
}
if(xmax!=xmin)
{
t=(xmax-xmin)/255;
for(i=0;i<nx*ny;i++) xyz[i]=(xmax-xyz[i])/t;
}
for(i=0;i<nx*ny;i++) xyz[i]=255-xyz[i] ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -