神秘仿真小代码(手搓)
  • 板块灌水区
  • 楼主RwenProgramming
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/12 19:11
  • 上次更新2024/12/12 22:13:25
查看原帖
神秘仿真小代码(手搓)
1005366
RwenProgramming楼主2024/12/12 19:11

马蜂一般,勿喷
求最大射程代码还没改好(

#include"stdio.h"
#include"math.h"
#include"stdlib.h"
#include"string.h"

typedef struct
{
	double x,y;
	double vx,vy;
	double theta,V;
}Stong_vari;
typedef struct
{
	double t,dT;
}Simu_vari;

void output();
void fly_stone();
void fly_init();

double g;
double Hmax,theta0;
int flag_END,count;
int flag_1st_R_record;
double R_old,R_now,theta_old;

//FILE *fpout;
Stong_vari Stone1,Stone2;
Simu_vari Simu;

int main()
{	
	//fpout=fopen("result.dat","w");
	flag_1st_R_record=0;
//	for( theta0=5.0;theta0<=90.0;theta0=theta0+2.5 )
	theta0=45.0;//发射角
	{
		Simu.t=0.0; count=0;
		Simu.dT=0.001;flag_END=0; 
		fly_init();
		while(flag_END==0){
			Simu.t=Simu.t+Simu.dT;//时间
			fly_stone();
			if(Stone1.y>=Hmax){
				Hmax=Stone1.y;
			}
			if( Stone1.y<=0.0 && Simu.t>=0.5 ){
				flag_END=1;
			}
			if(count%1==0){
				//output();
			}
			printf("时间=%f 距离=%f 高度=%f\n",Simu.t,Stone1.x,Stone1.y);
			count++;
		}//仿真结束
		R_now=Stone1.x;
		if(flag_1st_R_record==0){
			R_old=Stone1.x;
			flag_1st_R_record=1;
		}
		if( R_now<R_old ){
//			printf("最大射程R=%f 对应最大射角=%f\n",R_old,theta_old);
//			break;
		}
		R_old=R_now;theta_old=theta0;
		printf("初始射角=%lf 射程=%lf 最大高度=%lf\n",theta0,Stone1.x,Hmax);
		//printf("%f %f %f\n",theta0,Stone1.x,Hmax);
	}//theta0
	//fclose(fpout);
	getchar();
  return 0;
}
void fly_init()
{
	Stone1.x=0.0;
	Stone1.y=0.0;
	Stone1.V=10.0;
	Stone1.theta=theta0/57.3;//角度 -> 弧度
	Stone1.vx=Stone1.V*cos(Stone1.theta);
	Stone1.vy=Stone1.V*sin(Stone1.theta);
	g=9.8;
	Hmax=0.0;
}

void fly_stone()
{
	Stone1.x=Stone1.x+Stone1.vx*Simu.dT;
	Stone1.y=Stone1.y+Stone1.vy*Simu.dT;
	Stone1.vx=Stone1.vx;
	Stone1.vy=Stone1.vy-g*Simu.dT;
}

void output()
{
	//fprintf(fpout,"%f %f %f %d\n",Simu.t,Stone1.x,Stone1.y,flag_END);
}

温馨提示:洛谷在线IDE会输出超限

2024/12/12 19:11
加载中...