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

📄 traceview.cpp

📁 生成理论记录模块,适合物探方面编程
💻 CPP
字号:
// TraceView.cpp : implementation of the CTraceView class
//

#include "stdafx.h"
#include "Trace.h"

#include "TraceDoc.h"
#include "TraceView.h"

#include "math.h"
#include "fstream.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTraceView

IMPLEMENT_DYNCREATE(CTraceView, CView)

BEGIN_MESSAGE_MAP(CTraceView, CView)
	//{{AFX_MSG_MAP(CTraceView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTraceView construction/destruction

CTraceView::CTraceView()
{
	// TODO: add construction code here

}

CTraceView::~CTraceView()
{
}

BOOL CTraceView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CTraceView drawing

void CTraceView::OnDraw(CDC* pDC)
{
	CTraceDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	pDC=GetDC();
	CRect Recto;
	GetClientRect(&Recto);
	
	pDC->SetMapMode(MM_ANISOTROPIC);
	pDC->SetViewportOrg(0,0);
	pDC->SetViewportExt(Recto.right,Recto.bottom);

	pDC->SetWindowOrg(0,0);
	pDC->SetWindowExt(1400,1600);

	CString str;

	for(int i=0;i<12;i++)
	{
		pDC->MoveTo((i+1)*100,50);
		for(int j=0;j<1500;j++)
		{
			pDC->LineTo(int(trace[j][i]*100),j+51);
		}
	}
	//pDC->LineTo(950,900);
	//pDC->LineTo(50,50);
	Trace();
}

/////////////////////////////////////////////////////////////////////////////
// CTraceView printing

BOOL CTraceView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTraceView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTraceView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CTraceView diagnostics

#ifdef _DEBUG
void CTraceView::AssertValid() const
{
	CView::AssertValid();
}

void CTraceView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CTraceDoc* CTraceView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTraceDoc)));
	return (CTraceDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTraceView message handlers


void CTraceView::Trace()
{
    double t=0.002;  //采样间隔
	int n=31;   //子波长度
	int f=40;  //子波频率
	double s[31];
	double pi=3.1415926;
	fstream outfile;
	outfile.open("s.txt",ios::out);
	for(int i=0;i<n;i++)
	{
		s[i]=cos(2*pi*f*(i+1-(n/2+1))*t)*exp(-pow(2*pi*f*(i+1-(n/2+1))*t,2));  //余弦钟形子波
		//s[i]=(1-2*pow(pi*f*i*t,2)*exp(-pow(pi*f*i*t,2)));  //雷克子波
		outfile<<i+1<<"\t"<<s[i]<<endl;
	}
	outfile.close();

	int v=1000;  //速度
	int h=200;   //深度
	int X=100;   //道间距
	int N=12;    //记录道数
	int T=1500;   //采样点数
	double time[12];
	int x;
	
	outfile.open("time.txt",ios::out);
	for(i=0;i<N;i++)
	{
		x=X*N/2-X*(i+1);
		time[i]=sqrt(pow(h,2)+pow(x,2)/4)/v;		
	}
		
	for(i=0;i<N;i++)
	{
		time[i]=int(time[i]/t);
		outfile<<i+1<<"\t"<<time[i]<<endl;
	}
	outfile.close();

	outfile.open("trace1.txt",ios::out);
	    
	double noise[1500][12];
	int num,j;

	for(i=0;i<T;i++)
	{
		outfile<<i+1<<"\t";
		for(j=0;j<N;j++)
		{
			trace[i][j]=0.0;
			outfile<<trace[i][j]<<"\t";
		}
		outfile<<endl;
	}

	for(i=0;i<N;i++)
	{
		num=int(time[i]);
		for(j=num-1;j<num+n-1;j++)
		{
			trace[j][i]=s[j-num+1];
		}
	}
    
	outfile.close();
	outfile.open("trace.txt",ios::out);
	for(i=0;i<T;i++)
	{
		outfile<<i+1<<"\t";
		for(j=0;j<N;j++)
			outfile<<float(trace[i][j])<<"\t";
		outfile<<endl;
	}
    
	outfile.close();
	outfile.open("noise.txt",ios::out);

	for(i=0;i<T;i++)
	{
		outfile<<i+1;
		for(j=0;j<N;j++)
		{
			noise[i][j]=Crand(rand())/2;
			outfile<<" "<<noise[i][j]<<" ";
		}
		outfile<<endl;
	}

	outfile.close();
	outfile.open("TraceNoise.txt",ios::out);

	for(i=0;i<T;i++)
	{
		outfile<<i+1<<"\t";
		for(j=0;j<N;j++)
		{
			trace[i][j]=trace[i][j]+noise[i][j];
			outfile<<trace[i][j]<<"\t";
		}
		outfile<<endl;
	}

	outfile.close();
	outfile.open("TraceEnd.txt",ios::out);
	for(i=0;i<N;i++)
	{
		for(j=0;j<T;j++)
			trace[j][i]=trace[j][i]+i+1;
	}
	
	for(i=0;i<T;i++)
	{
		outfile<<i+1<<"\t";
		for(j=0;j<N;j++)
			outfile<<trace[i][j]<<"\t";
		outfile<<endl;
	}
	outfile.close();
}

double CTraceView::Crand(int a)
{
	double b;
	if(a<1)
		b=double(a)/10;
	else if(a<100)
		b=double(a)/100;
	else if(a<1000)
		b=double(a)/1000;
	else if(a<10000)
		b=double(a)/10000;
	else
		b=double(a)/100000;
	return b;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -