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

📄 possiblepoints.cpp

📁 2006年世界杯足球赛2D仿真组第16名的源代码。在此代码上随便改改
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}int PossiblePoints::addFlag(const FieldFlag* flag, float headAngle,	float quantizeStep){	int i, j;	int n = 0;	float a, b, c, d, e;	float distMin, distMax, dirMin, dirMax;	float flagX = 0, flagY = 0;	//	//LogMaker.Log(LV_WModel,"addFlag Start maxData= ",maxData);	a = flag->getSeeDistance();	b = log(a);	c = quantize(b, quantizeStep); // .1 = flag_quantize_step	quantizeRange(c, quantizeStep, d, e); // .1 = flag_quantize_step	distMin = exp(d);	distMax = exp(e);	if (distMin > distMax)	{		a = distMax;		distMax = distMin;		distMin = a;	}	a = flag->getSeeDirection();	a += headAngle;	quantizeRange(a, 1, dirMin, dirMax);	flagX = flag->getPos().getX();	flagY = flag->getPos().getY();	//	//LogMaker.Log(LV_WModel,"addFlag flagX, flagY= ",flagX," ",flagY);	//	//LogMaker.Log(LV_WModel,"PP CDists : " ,distMin, " " ,distMax);	//	//LogMaker.Log(LV_WModel,"PP CDirs : " ,dirMin, " " ,dirMax);	Degree::absoluteAngle(dirMin);	Degree::absoluteAngle(dirMax);	for (i = 0; i < pointsTablePW; i++)		for (j = 0; j < pointsTablePH; j++)			if (data[i + pointsTablePW * j] == maxData)			{				a = flagX - (((i + 0.5f) * dX) + left);				b = flagY - (((j + 0.5f) * dY) + down);				c = hypot(a, b);				d = Degree::arcTan2(b, a);				Degree::absoluteAngle(d);				//				//LogMaker.Log(LV_WModel,"PP addFlag CP i, j=",i," ",j);				//				//LogMaker.Log(LV_WModel,"PP addFlag CP PX, PY=",(((i+0.5f)*dX) + left)," ",(((j+0.5f)*dY) + down));				//				//LogMaker.Log(LV_WModel,"PP addFlag CP DX, DY=",a," ",b);				//				//LogMaker.Log(LV_WModel,"PP addFlag CP Dist, Dir=",c," ",d);				if (c > distMin && c < distMax)					if (Degree::isBetween(dirMin, dirMax, d)) // IsBeTwEeN cAn Be FaStEr BeCaUsE fIrSt TwO aRgUmEnTs ArE cOnStAnT mAnY tImEs					{						//						//LogMaker.Log(LV_WModel,"PP addFlag CP Added");						n++;						(data[i + pointsTablePW * j])++;					}			}	if (n > 0)		maxData++;	//	view();	//	//LogMaker.Log(LV_WModel,"addFlag End maxData= ",maxData);	return n;}void PossiblePoints::calculate(){	int i, j;	if (maxData == 0)		return;	float sumX = 0;	float sumY = 0;	float sumDeviationX = 0;	float sumDeviationY = 0;	float N = 0;	//LogMaker.Log(LV_WModel,"calculate Start");	//LogMaker.Log(LV_WModel,"maxData=",maxData);	view();	for (i = 0; i < pointsTablePW; i++)		for (j = 0; j < pointsTablePH; j++)			if (data[i + pointsTablePW * j] == maxData)			{				//LogMaker.Log(LV_WModel,"AddPoint D, getX(),getY() = ",data[i+pointsTablePW * j]," ",i," ",j);				//				//LogMaker.Log(LV_WModel,"	   ",  (   ((float)(data[i][j])) /max));				//				sumX+=((i * dX) + left)*   (   ((float)(data[i][j])) /max) ;				//				sumDeviationX+=(((i * dX) + left)*((i * dX) + left))*   (   ((float)(data[i][j])) /max);				//				sumY+=((j * dY) + down)*   (   ((float)(data[i][j])) /max);				//				sumDeviationY+=(((j * dY) + down)*((j * dY) + down))*   (   ((float)(data[i][j])) /max);				//				N+=(   (   ((float)(data[i][j])) /max));				//				//LogMaker.Log(LV_WModel,"PP Calc AddPoint D, getX(),getY() = ",data[i][j]," ",i," ",j);				//				//LogMaker.Log(LV_WModel,"PP Calc AddPoint PX, PY = ",((i+0.5f)*dX) + left," ",((j+0.5f)*dY) + down);				sumX += (((i + 0.5f) * dX) + left);				sumDeviationX += ((((i + 0.5f) * dX) + left) * (((i + 0.5f) * dX) +					left));				sumY += (((j + 0.5f) * dY) + down);				sumDeviationY += ((((j + 0.5f) * dY) + down) * (((j + 0.5f) * dY) +					down));				N += 1;			}	//LogMaker.Log(LV_WModel,"PP Calc sumX, sumY, N=",sumX," ",sumY," ",N);	//LogMaker.Log(LV_WModel,"PP Calc sumDeviationX, sumDeviationY, N=",sumDeviationX," ",sumDeviationY," ",N);	xAverage = (sumX / N);	yAverage = (sumY / N);	//LogMaker.Log(LV_WModel,"PP Calc XA, YA=",xAverage," ",yAverage);	xDeviation = (sumDeviationX / N) - (xAverage * xAverage);	yDeviation = (sumDeviationY / N) - (yAverage * yAverage);	//LogMaker.Log(LV_WModel,"PP Calc XD, YD=",xDeviation," ",yDeviation);	xDeviation = sqrt(fabs(xDeviation));	yDeviation = sqrt(fabs(yDeviation));	//LogMaker.Log(LV_WModel,"PP Calc XD, YD=",xDeviation," ",yDeviation);	//LogMaker.Log(LV_WModel,"calculate End");}int PossiblePoints::addPositionSimulate(float x, float y, float velX,	float velY, float rand, float posDeviation, float velDeviation){	float xRandMax, yRandMax;	int n = 0;	//LogMaker.Log(LV_WModel,"Pos Sim Start getX()=",getX()," getY()=",getY());	//LogMaker.Log(LV_WModel,"Pos Sim Start PD=",posDeviation," VD=",velDeviation);	xRandMax = velX * rand;	yRandMax = velY * rand;	xRandMax += (posDeviation + velDeviation) / SQRT2;	yRandMax += (posDeviation + velDeviation) / SQRT2;	//LogMaker.Log(LV_WModel,"Pos Sim XYRandMax=",xRandMax," ",yRandMax);	float iteration;	int posSimX, posSimY;	Vector absVelVector, relVelVector;	absVelVector.setAsCartesian(velX, velY);	iteration = dX > dY ? dY : dX;	if (iteration < pointsTablePDX / 2)		iteration = pointsTablePDX / 2;	if (iteration < pointsTablePDY / 2)		iteration = pointsTablePDY / 2;	//LogMaker.Log(LV_WModel,"Pos Sim iteration=",iteration);	for (float i = -xRandMax; i <= xRandMax; i += iteration)		for (float j = -yRandMax; j <= yRandMax; j += iteration)		{			relVelVector.setAsCartesian(i, j);			relVelVector.rotate(-(absVelVector.getDirection()));			posSimX = (int) ((relVelVector.getX() + x - left) / dX);			posSimY = (int) ((relVelVector.getY() + y - down) / dY);			//LogMaker.Log(LV_WModel,"Pos Sim i, j=",i," ",j);			//LogMaker.Log(LV_WModel,"Pos Sim posSimX, posSimY=",posSimX," ",posSimY);			if (posSimX >= 0 &&				posSimX < pointsTablePW &&				posSimY >= 0 &&				posSimY < pointsTablePH)				if (data[posSimX + pointsTablePW * posSimY] == maxData)				{					data[posSimX + pointsTablePW * posSimY]++;					//LogMaker.Log(LV_WModel,"Pos Sim Added");					n++;				}		}	if (n > 0)		maxData++;	//LogMaker.Log(LV_WModel,"Pos Sim Added N=",n," getX()=",getX()," getY()=",getY());	//LogMaker.Log(LV_WModel,"velX=",velX," velY=",velY," rand=",rand);	return n;}void PossiblePoints::setBySee(float distance, float direction,	float headAngle, const Vector &agentPosition, float quantizeStep){	float a, b, c, d, e;	float distMin, distMax, dirMin, dirMax;	Vector ray;	//LogMaker.Log(LV_WModel,"PP See Start ");	// Initialize Table With Nearest flag	a = distance;	b = log(a);	c = quantize(b, quantizeStep); // .1 = flag_quantize_step	d = 0;	e = 0;	quantizeRange(c, quantizeStep, d, e); // .1 = flag_quantize_step	distMin = exp(d);	distMax = exp(e);	if (distMin > distMax)	{		a = distMax;		distMax = distMin;		distMin = a;	}	//	//LogMaker.Log(LV_WModel,"PP See Dist MM=",distMin," ",distMax);	a = direction;	a += headAngle;	quantizeRange(a, 1, dirMin, dirMax);	//	//LogMaker.Log(LV_WModel,"PP headAngle=",headAngle);	//	//LogMaker.Log(LV_WModel,"PP See Dir MM=",dirMin," ",dirMax);	ray.setAsPolar(distMin, dirMin);	ray = ray + agentPosition;	a = ray.getX(); // xmin	b = ray.getY(); // ymin	c = ray.getX(); // xmax	d = ray.getY(); // ymax	//	//LogMaker.Log(LV_WModel,"PP See 1XMin XMax=",a," ",c);	//	//LogMaker.Log(LV_WModel,"PP See 1YMin YMax=",b," ",d);	ray.setAsPolar(distMin, dirMax);	ray = ray + agentPosition;	if (ray.getX() < a)		a = ray.getX();	if (ray.getX() > c)		c = ray.getX();	if (ray.getY() < b)		b = ray.getY();	if (ray.getY() > d)		d = ray.getY();	//	//LogMaker.Log(LV_WModel,"PP See 2XMin XMax=",a," ",c);	//	//LogMaker.Log(LV_WModel,"PP See 2YMin YMax=",b," ",d);	ray.setAsPolar(distMax, dirMin);	ray = ray + agentPosition;	if (ray.getX() < a)		a = ray.getX();	if (ray.getX() > c)		c = ray.getX();	if (ray.getY() < b)		b = ray.getY();	if (ray.getY() > d)		d = ray.getY();	//	//LogMaker.Log(LV_WModel,"PP See 3XMin XMax=",a," ",c);	//	//LogMaker.Log(LV_WModel,"PP See 3YMin YMax=",b," ",d);	ray.setAsPolar(distMax, dirMax);	ray = ray + agentPosition;	if (ray.getX() < a)		a = ray.getX();	if (ray.getX() > c)		c = ray.getX();	if (ray.getY() < b)		b = ray.getY();	if (ray.getY() > d)		d = ray.getY();	//	//LogMaker.Log(LV_WModel,"PP See 4XMin XMax=",a," ",c);	//	//LogMaker.Log(LV_WModel,"PP See 4YMin YMax=",b," ",d);	Degree::absoluteAngle(dirMin);	Degree::absoluteAngle(dirMax);	if (Degree::isBetween(dirMin, dirMax, 90))	{		ray.setAsPolar(distMax, 90);		ray = ray + agentPosition;		//		if (ray.getX() < a) a = ray.getX();		//	  if (ray.getX() > c) c = ray.getX();		if (ray.getY() < b)			b = ray.getY();		if (ray.getY() > d)			d = ray.getY();		//	//LogMaker.Log(LV_WModel,"PP See 5XMin XMax=",a," ",c);		//	//LogMaker.Log(LV_WModel,"PP See 5YMin YMax=",b," ",d);	}	if (Degree::isBetween(dirMin, dirMax, 270))	{		ray.setAsPolar(distMax, -90);		ray = ray + agentPosition;		//		if (ray.getX() < a) a = ray.getX();		//	  if (ray.getX() > c) c = ray.getX();		if (ray.getY() < b)			b = ray.getY();		if (ray.getY() > d)			d = ray.getY();		//	//LogMaker.Log(LV_WModel,"PP See 6XMin XMax=",a," ",c);		//	//LogMaker.Log(LV_WModel,"PP See 6YMin YMax=",b," ",d);	}	if (Degree::isBetween(dirMin, dirMax, 0))	{		ray.setAsPolar(distMax, 0);		ray = ray + agentPosition;		if (ray.getX() < a)			a = ray.getX();		if (ray.getX() > c)			c = ray.getX();		//		if (ray.getY() < b) b = ray.getY();		//	  if (ray.getY() > d) d = ray.getY();		//	//LogMaker.Log(LV_WModel,"PP See 7XMin XMax=",a," ",c);		//	//LogMaker.Log(LV_WModel,"PP See 7YMin YMax=",b," ",d);	}	if (Degree::isBetween(dirMin, dirMax, 180))	{		ray.setAsPolar(distMax, 180);		ray = ray + agentPosition;		if (ray.getX() < a)			a = ray.getX();		if (ray.getX() > c)			c = ray.getX();		//		if (ray.getY() < b) b = ray.getY();		//		if (ray.getY() > d) d = ray.getY();		//	//LogMaker.Log(LV_WModel,"PP See 8XMin XMax=",a," ",c);		//	//LogMaker.Log(LV_WModel,"PP See 8YMin YMax=",b," ",d);	}	initTableByNorthEast(a, b, c - a, d - b);	//	//LogMaker.Log(LV_WModel,"PP Table Inited");	//	view();	int n;	n = addSee(distance, direction, headAngle, agentPosition, quantizeStep);	//LogMaker.Log(LV_WModel,"PP See End N=",n);}int PossiblePoints::addSee(float distance, float direction, float headAngle,	const Vector &agentPosition, float quantizeStep){	int i, j;	int n = 0;	float a, b, c, d, e;	float distMin, distMax, dirMin, dirMax;	//	//LogMaker.Log(LV_WModel,"addSee Start maxData= ",maxData);	a = distance;	b = log(a);	c = quantize(b, quantizeStep); // .1 = flag_quantize_step	d = 0;	e = 0;	quantizeRange(c, quantizeStep, d, e); // .1 = flag_quantize_step	distMin = exp(d);	distMax = exp(e);	if (distMin > distMax)	{		a = distMax;

⌨️ 快捷键说明

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