⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 info3d.h

📁 用Visual C++编写的地震记录显示程序
💻 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 + -