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

📄 history.cpp

📁 pic 模拟程序!面向对象
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	if(comb < 2) comb = 2;	data = new Scalar*[vector_size];	for(int i=0;i<vector_size;i++) {		data[i]=new Scalar[alloc_size+1];		///memset(data[i],0,(alloc_size+1) * sizeof(Scalar));		for ( int j = 0; j <= alloc_size; j++)		  data[i][j] = 0.0;	}}Vec_Pointers_History::~Vec_Pointers_History() {  if(data) {    for ( int i = 0; i < vector_size; i++ )      delete [] data[i];    delete [] data;  }}void Vec_Pointers_History::add(Scalar **values, Scalar time) {	if(take_state) {		take_state--;		return;	}	take_state = step-1;  // reset the counter	hist_hi++;	hist_num = hist_hi+1;	if(hist_hi >= alloc_size) comb_arrays();	for(int i=0;i<vector_size;i++)		data[i][hist_hi] = *values[i];	time_array[hist_hi] = time;}void Vec_Pointers_History::comb_arrays(void) {	int i;	int j;	hist_hi/=comb;	hist_num = hist_hi+1;	n_comb++;		// discard elements by taking every "comb"th element	for(i=0,j=0;i<hist_hi;i++,j+=comb) {		for(int k=0;k<vector_size;k++)			data[k][i]=data[k][j];		time_array[i]=time_array[j];	}	step*=comb;  // increase the step.}void Vec_Pointers_History::dump(FILE *DMPFile){	History::dump(DMPFile);	int datasize = vector_size * hist_num;	XGWrite(&datasize, 4, 1, DMPFile, "int");	XGWrite(&comb, 4, 1, DMPFile, "int");	XGWrite(&n_comb, 4, 1, DMPFile, "int");	XGWrite(&take_state, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	// the following 6 ints are redundant but necessary	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	for(int v=0;v<vector_size;v++)		for(int i=0; i<hist_num; i++)			XGWrite(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);}	void Vec_Pointers_History::restore_2_00(FILE *DMPFile){	History::restore_2_00(DMPFile);	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&vector_size, 4, 1, DMPFile, "int");	for(int v=0;v<vector_size;v++)		for(int i=0; i<hist_num; i++)			XGRead(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);}		void Vec_Pointers_History::restore(FILE *DMPFile,Scalar _A1,									  Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	History::restore(DMPFile, _A1, _A2, _B1, _B2, xl,  yl, A1, A2,  B1, B2, j1,  k1,  j2, k2);	int datasize;	int dummy[11];//	int i;//	Scalar discard;	XGRead(&datasize, 4, 1, DMPFile, "int");	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&vector_size, 4, 1, DMPFile, "int");	// read the unused ints	XGRead(dummy,4,6,DMPFile,"int");	// read in the history data on a line.	History::load_line_history_from_file(DMPFile,_A1,_A2,_B1,_B2,xl,yl,												  A1,A2,B1,B2,vector_size,hist_num,data,j1,k1,j2,k2);}	// Reads in the data from the dump file into the right part	// of the array.void History::load_line_history_from_file(FILE *DMPFile,Scalar _A1,Scalar _A2,												 Scalar _B1,Scalar _B2,int xl,int yl,												 Scalar A1,Scalar A2,Scalar B1,Scalar B2,												 int _vector_size, int _hist_num, Scalar **_data,int j1,int k1,int j2,int k2){	int is=0;	int i;	int datalength=MAX(xl,yl);	int mydatalength=MAX((j2-j1),(k2-k1));	Scalar ReadLength=MAX(_B1-_A1,_B2-_A2);	Scalar MyLength=MAX(B1-A1,B2-A2);	Scalar mydelta = MyLength/mydatalength;	Scalar indelta = ReadLength/datalength;	// starting (and counter) position for data read in	Scalar currentDataPos=(_A1!=_B1)?MIN(_A1,_B1):MIN(_A2,_B2);	// start "physical" position of the data in memory	Scalar myStart = (A1!=B1)?MIN(A1,B1):MIN(A2,B2);	Scalar myEnd = (A1!=B1)?MAX(A1,B1):MAX(A2,B2);	Scalar discard;	for(int v=0;v<_vector_size;v++) {		int index;				index = (int) ( (currentDataPos - myStart) / mydelta + 0.5);				// make sure we didn't make a rounding mistake at 0.		if(currentDataPos - myStart < -0.5) index = -1;		if(currentDataPos > myEnd + mydelta/2.0) index = -1;		currentDataPos += mydelta;		if(index >=0) {			for(i=0; i<_hist_num; i++)				XGRead(&_data[index][i], ScalarInt, 1, DMPFile, ScalarChar);		} else			for(i=0;i<hist_num;i++) XGRead(&discard,ScalarInt,1, DMPFile,ScalarChar);	}}	/*********************************************************************/Vec_Pointers_History_Ave::Vec_Pointers_History_Ave(int _vector_size,								   int _alloc_size, int _ave, int _comb):History(_alloc_size) {	comb = _comb;	ave = _ave;	vector_size = _vector_size;	if(vector_size < 1) vector_size = 1;	n_comb = 0;	take_state = 0;	hist_hi = -1;	hist_num = 0;	step = ave;	if(comb < 2) comb = 2;	data = new Scalar*[vector_size];	for(int i=0;i<vector_size;i++) {		data[i]=new Scalar[alloc_size+1];		memset(data[i],0,(alloc_size+1) * sizeof(Scalar));	}}void Vec_Pointers_History_Ave::add(Scalar **values, Scalar time) {	if(take_state) {		take_state--;		for(int i=0;i<vector_size;i++)			data[i][hist_hi] += *values[i]/step;				return;	}	take_state = step-1;  // reset the counter	hist_hi++;	hist_num = hist_hi;	if(hist_hi >= alloc_size) comb_arrays();	for(int i=0;i<vector_size;i++)		data[i][hist_hi] = *values[i]/step;	time_array[hist_hi] = time;}void Vec_Pointers_History_Ave::comb_arrays(void) {	int i;	int j;	hist_hi/=comb;	hist_num = hist_hi;	n_comb++;		// discard elements by taking every "comb"th element	Scalar temp=0;	for(i=0,j=0;i<hist_hi;i++,j+=comb) {		for(int k=0;k<vector_size;k++)			{				for(int m=0;m<comb;m++)					{						temp += data[k][j+m];						data[k][j+m] = 0.0;					}				data[k][i] =temp/comb;				temp =0;			}		time_array[i]=time_array[j];	}	step*=comb;  // increase the step.	take_state = step-1;}void Vec_Pointers_History_Ave::dump(FILE *DMPFile){	History::dump(DMPFile);	int datasize = vector_size * hist_num;	XGWrite(&datasize, 4, 1, DMPFile, "int");	XGWrite(&comb, 4, 1, DMPFile, "int");	XGWrite(&ave, 4, 1, DMPFile, "int");	XGWrite(&n_comb, 4, 1, DMPFile, "int");	XGWrite(&take_state, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	// redundant, but necessary	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	for(int v=0;v<vector_size;v++)		for(int i=0; i<hist_num; i++)			XGWrite(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);}	void Vec_Pointers_History_Ave::restore_2_00(FILE *DMPFile){	History::restore_2_00(DMPFile);	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&vector_size, 4, 1, DMPFile, "int");	for(int v=0;v<vector_size;v++)		for(int i=0; i<hist_num; i++)			XGRead(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);}	void Vec_Pointers_History_Ave::restore(FILE *DMPFile,Scalar _A1,									  Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	History::restore(DMPFile, _A1,_A2, _B1, _B2, xl, yl, A1, A2,  B1, B2,j1, k1, j2, k2);	int datasize;	int dummy[11];	XGRead(&datasize, 4, 1, DMPFile, "int");	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&vector_size, 4, 1, DMPFile, "int");	XGRead(dummy,4,5,DMPFile,"int");	// load in the data along the line	History::load_line_history_from_file(DMPFile,_A1,_A2,_B1,_B2,xl,yl,												  A1,A2,B1,B2,vector_size,hist_num,data,j1,k1,j2,k2);}	/**************************************************************************/Vec_Pointers_History_Local_Ave::Vec_Pointers_History_Local_Ave(int _vector_size, int _alloc_size, int _ave, int _left_shift):History(_alloc_size) {	ave = _ave;	vector_size = _vector_size;	if(vector_size < 1) vector_size = 1;	left_shift = _left_shift;	if(left_shift > alloc_size) left_shift = alloc_size;	if(left_shift < 1) left_shift = 1;	take_state = 0;	hist_hi = -1;	hist_num = 0;	step = ave;	data = new Scalar*[vector_size];	for(int i=0;i<vector_size;i++) {		data[i]=new Scalar[alloc_size+1];		memset(data[i],0,(alloc_size+1) * sizeof(Scalar));	}}void Vec_Pointers_History_Local_Ave::add(Scalar **values, Scalar time) {	if(take_state) {		take_state--;		for(int i=0;i<vector_size;i++)			data[i][hist_hi] += *values[i]/step;				return;	}	take_state = step-1;  // reset the counter	hist_hi++;	hist_num = hist_hi;	if(hist_hi >= alloc_size) shift_arrays();	for(int i=0;i<vector_size;i++)		data[i][hist_hi] = *values[i]/step;	time_array[hist_hi] = time;}void Vec_Pointers_History_Local_Ave::shift_arrays(void) {	int i;	int j;	// unfortunately, we can't just do this cyclically because	// of limitations of our graphics library	for(i=left_shift,j=0;i<hist_hi;i++,j++) 		{			for(int k=0;k<vector_size;k++)				data[k][j]=data[k][i];			time_array[j]=time_array[i];		}	hist_hi-=left_shift;	hist_num = hist_hi;}void Vec_Pointers_History_Local_Ave::dump(FILE *DMPFile){	History::dump(DMPFile);	int datasize = vector_size * hist_num;	XGWrite(&datasize, 4, 1, DMPFile, "int");	XGWrite(&left_shift, 4, 1, DMPFile, "int");	XGWrite(&ave, 4, 1, DMPFile, "int");	XGWrite(&take_state, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	// following are redundant but necessary.	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	XGWrite(&vector_size, 4, 1, DMPFile, "int");	for(int v=0;v<vector_size;v++)		for(int i=0; i<hist_num; i++)			XGWrite(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);}	void Vec_Pointers_History_Local_Ave::restore_2_00(FILE *DMPFile){	History::restore_2_00(DMPFile);	XGRead(&left_shift, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&vector_size, 4, 1, DMPFile, "int");	for(int v=0;v<vector_size;v++)		for(int i=0; i<hist_num; i++)			XGRead(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);}void Vec_Pointers_History_Local_Ave::restore(FILE *DMPFile,Scalar _A1,									  Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	History::restore(DMPFile,_A1, _A2, _B1, _B2, xl,yl, A1, A2,  B1, B2,j1, k1,j2,k2);	int datasize;	int dummy[11];	XGRead(&datasize,4,1,DMPFile,"int");	XGRead(&left_shift, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&vector_size, 4, 1, DMPFile, "int");	XGRead(dummy,4,6,DMPFile,"int");	History::load_line_history_from_file(DMPFile,_A1,_A2,_B1,_B2,xl,yl,													 A1,A2,B1,B2,vector_size,hist_num,data,j1,k1,j2,k2);}	/**************************************************************************/Vector_History::Vector_History(int _vector_size,int _alloc_size, int _comb):History(_alloc_size) {	comb = _comb;	vector_size = _vector_size;	if(vector_size < 1) vector_size = 1;	n_comb = 0;	take_state = 0;	hist_hi = -1;	hist_num = 0;	step = 1;	if(comb < 2) comb = 2;	data = new Scalar*[vector_size];	for(int i=0;i<vector_size;i++) {		data[i]=new Scalar[alloc_size+1];		memset(data[i],0,(alloc_size+1) * sizeof(Scalar));	}}void Vector_History::add(Scalar *values, Scalar time) {	if(take_state) {		take_state--;

⌨️ 快捷键说明

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