亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.cpp

?? 通過人工智能算法快速實現神經網絡識別
?? CPP
字號:
#include "main.h"
#include "time.h"

//---------------------------------------------------------------------------
/*
Book:           AI for Game Developers
Authors:        David M. Bourg & Glenn Seemann
Example:        Chasing and evading in continuous environments, Chapter 2
*/
//---------------------------------------------------------------------------


// Global Variables:
int				FrameCounter = 0;
RigidBody2D		Craft1, Craft2; 
Vector			Target;

#define		_TIMESTEP		0.001
#define		_TOL			1e-10
#define		_FWDTIME		10
#define		_THRUSTFACTOR	3
#define     _CHASESETUP		true

bool	Initialize(void)
{
	
	Craft1.fMass = 10;
	Craft1.fInertia = 10;
	Craft1.fInertiaInverse = 1/10;
	Craft1.vPosition.x = _WINWIDTH-60;
	Craft1.vPosition.y = _WINHEIGHT*0.8;
	Craft1.fWidth = 10;
	Craft1.fLength = 20;
	Craft1.fHeight = 5;
	Craft1.fOrientation = 135;	
	Craft1.CD.y = -0.12*Craft1.fLength;		Craft1.CD.x = 0.0f;			// coordinates of the body center of drag
	Craft1.CT.y = -0.50*Craft1.fLength;		Craft1.CT.x = 0.0f;			// coordinates of the propeller thrust vector
	Craft1.CPT.y = 0.5*Craft1.fLength;		Craft1.CPT.x = -0.5*Craft1.fWidth;	// coordinates of the port bow thruster
	Craft1.CST.y = 0.5*Craft1.fLength;		Craft1.CST.x = 0.5*Craft1.fWidth;	// coordinates of the starboard bow thruster

	Craft1.ProjectedArea = (Craft1.fLength + Craft1.fWidth) * Craft1.fHeight;
	Craft1.ThrustForce = _THRUSTFORCE*1;


	Craft2.fMass = 10;
	Craft2.fInertia = 10;
	Craft2.fInertiaInverse = 1/10;
	if(_CHASESETUP)
	{
		Craft2.vPosition.x = 40;
		Craft2.vPosition.y = _WINHEIGHT*0.8;
	} else {
		Craft2.vPosition.x = Craft1.vPosition.x - Craft1.fLength*8;
		Craft2.vPosition.y = Craft1.vPosition.y - Craft1.fLength*4;
	}

	Craft2.fWidth = 10;
	Craft2.fLength = 20;
	Craft2.fHeight = 5;
	if(_CHASESETUP)
		Craft2.fOrientation = -135;
	else
		Craft2.fOrientation = 135;
	Craft2.CD.y = -0.12*Craft2.fLength;		Craft2.CD.x = 0.0f;			// coordinates of the body center of drag
	Craft2.CT.y = -0.50*Craft2.fLength;		Craft2.CT.x = 0.0f;			// coordinates of the propeller thrust vector
	Craft2.CPT.y = 0.5*Craft2.fLength;		Craft2.CPT.x = 0.5*Craft2.fWidth;	// coordinates of the port bow thruster
	Craft2.CST.y = 0.5*Craft2.fLength;		Craft2.CST.x = -0.5*Craft2.fWidth;	// coordinates of the starboard bow thruster

	Craft2.ProjectedArea = (Craft2.fLength + Craft2.fWidth) * Craft2.fHeight;
	Craft2.ThrustForce = _THRUSTFORCE*_THRUSTFACTOR;
	
	return true;
}


void	UpdateSimulation(void)
{
	double	dt = _TIMESTEP;
	RECT	r;
	
	Craft1.SetThrusters(false, false);
	
	if (IsKeyDown(VK_UP))
		Craft1.ModulateThrust(true);
	
	if (IsKeyDown(VK_DOWN))
		Craft1.ModulateThrust(false);
		
	if (IsKeyDown(VK_RIGHT))
		Craft1.SetThrusters(true, false);

	if (IsKeyDown(VK_LEFT))
		Craft1.SetThrusters(false, true);

	// Do craft 2 AI

	Craft2.Fa.x = 0;
	Craft2.Fa.y = 0;
	Craft2.Pa.x = 0;
	Craft2.Pa.y = 0;

	if(BasicChase)
	{
		DoCraft2Chase();
		DoCraft2ModulateThrust();
	}
	if(BasicEvade)
		DoCraft2Evade();
	if(InterceptChase)
	{
		
		//DoCraft2Intercept();
		//DoCraft2ModulateThrust();

		DoCraft2InterceptAlt();
		
		
	}
	if(PotentialChase)
		DoAttractCraft2();

	// update the simulation 
	Craft1.UpdateBodyEuler(dt);
	Craft2.UpdateBodyEuler(dt);

	if(FrameCounter >= _RENDER_FRAME_COUNT)
	{	
		
		// update the display
		if(!ShowTrails)
			ClearBackBuffer();

		DrawCraft(Craft1, RGB(0,0,255));
		DrawCraft(Craft2, RGB(255,0,0));

		RECT	r;
		
		r.left = (int) (Target.x-3);
		r.top = (int) (Target.y-3);
		r.right = (int) (Target.x+3);
		r.bottom = (int) (Target.y+3);
		DrawEllipse(&r, 1, RGB(0,255,0));

		CopyBackBufferToWindow();
		FrameCounter = 0;

	} else
		FrameCounter++;

	if(Craft1.vPosition.x > _WINWIDTH) Craft1.vPosition.x = 0;
	if(Craft1.vPosition.x < 0) Craft1.vPosition.x = _WINWIDTH;
	if(Craft1.vPosition.y > _WINHEIGHT) Craft1.vPosition.y = 0;
	if(Craft1.vPosition.y < 0) Craft1.vPosition.y = _WINHEIGHT;

	if(Craft2.vPosition.x > _WINWIDTH) Craft2.vPosition.x = 0;
	if(Craft2.vPosition.x < 0) Craft2.vPosition.x = _WINWIDTH;
	if(Craft2.vPosition.y > _WINHEIGHT) Craft2.vPosition.y = 0;
	if(Craft2.vPosition.y < 0) Craft2.vPosition.y = _WINHEIGHT;


}

void	DrawCraft(RigidBody2D	craft, COLORREF clr)
{
	Vector	vList[5];
	double	wd, lg;
	int		i;
	Vector	v1;

	wd = craft.fWidth;
	lg = craft.fLength;
	vList[0].y = lg/2;	vList[0].x = wd/2;
	vList[1].y = -lg/2;	vList[1].x = wd/2;
	vList[2].y = -lg/2;	vList[2].x = -wd/2;
	vList[3].y = lg/2;	vList[3].x = -wd/2;
	vList[4].y = lg/2*1.5; vList[4].x = 0;
	for(i=0; i<5; i++)
	{
		v1 = VRotate2D(craft.fOrientation, vList[i]);
		vList[i] = v1 + craft.vPosition;			
	}

	DrawLine(vList[0].x, vList[0].y, vList[1].x, vList[1].y, 2, clr);
	DrawLine(vList[1].x, vList[1].y, vList[2].x, vList[2].y, 2, clr);
	DrawLine(vList[2].x, vList[2].y, vList[3].x, vList[3].y, 2, clr);
	DrawLine(vList[3].x, vList[3].y, vList[4].x, vList[4].y, 2, clr);
	DrawLine(vList[4].x, vList[4].y, vList[0].x, vList[0].y, 2, clr);

	if(ShowVectors)
	{
		Vector	v, u;
		double	f = 5;

		// Show velocity vectors in green
		DrawLine(craft.vPosition.x, craft.vPosition.y, craft.vPosition.x+craft.vVelocity.x, craft.vPosition.y+craft.vVelocity.y, 3, RGB(0,255,0));
		
		// Show force vectors in black
		// thrust vector
		v.x = 0;
		v.y = craft.ThrustForce*f;
		v = VRotate2D(craft.fOrientation, v);
		u.x = craft.CT.x;
		u.y = craft.CT.y;
		u = VRotate2D(craft.fOrientation, u);
		DrawLine(craft.vPosition.x+u.x, craft.vPosition.y+u.y, craft.vPosition.x + u.x + v.x, craft.vPosition.y + u.y + v.y, 1, RGB(0,0,0));

		// port steering force
		v.x = craft.PThrust.x*f;
		v.y = craft.PThrust.y*f;
		v = VRotate2D(craft.fOrientation, v);
		u.x = craft.CPT.x;
		u.y = craft.CPT.y;
		u = VRotate2D(craft.fOrientation, u);
		DrawLine(craft.vPosition.x+u.x, craft.vPosition.y+u.y, craft.vPosition.x + u.x + v.x, craft.vPosition.y + u.y + v.y, 1, RGB(0,0,0));

		// stbd steering force
		v.x = craft.SThrust.x*f;
		v.y = craft.SThrust.y*f;
		v = VRotate2D(craft.fOrientation, v);
		u.x = craft.CST.x;
		u.y = craft.CST.y;
		u = VRotate2D(craft.fOrientation, u);
		DrawLine(craft.vPosition.x+u.x, craft.vPosition.y+u.y, craft.vPosition.x + u.x + v.x, craft.vPosition.y + u.y + v.y, 1, RGB(0,0,0));

		// applied force
		v.x = craft.Fa.x*f;
		v.y = craft.Fa.y*f;
		v = VRotate2D(craft.fOrientation, v);
		u.x = craft.Pa.x;
		u.y = craft.Pa.y;
		u = VRotate2D(craft.fOrientation, u);
		DrawLine(craft.vPosition.x+u.x, craft.vPosition.y+u.y, craft.vPosition.x + u.x + v.x, craft.vPosition.y + u.y + v.y, 1, RGB(0,0,0));

	}

}

void	DoCraft2Chase(void)
{
	Vector	u, v;
	bool	p = false;
	bool	s = false;
	
	u = VRotate2D(-Craft2.fOrientation, (Craft1.vPosition - Craft2.vPosition));
	u.Normalize();

	Target = Craft1.vPosition;

	if(u.x < -_TOL)
		p = true;
	else if(u.x > _TOL)
		s = true;
		
	Craft2.SetThrusters(p,s);
}

void	DoCraft2Evade(void)
{
	Vector	u, v;
	bool	p = false;
	bool	s = false;
	
	u = VRotate2D(-Craft2.fOrientation, (Craft1.vPosition - Craft2.vPosition));
	u.Normalize();

	if(u.x > 0)
		p = true;
	else if(u.x < 0)
		s = true;

	Craft2.SetThrusters(p,s);

	Target = Craft2.vPosition;
}

void	DoCraft2Intercept(void)
{
	Vector	u1, u2, u;
	Vector	s1, s2;
	Vector  Vr;
	double	t1, t2;
	Vector	s1unit, s2unit;
	bool	p = false;
	bool	s = false;

	Vr = Craft1.vVelocity - Craft2.vVelocity;

	s2 = GetVelocityIntersection() - Craft2.vPosition;
	s2unit = s2;
	s2unit.Normalize();
	u2 = VRotate2D(-Craft2.fOrientation, s2);
	t2 = s2.Magnitude()/(Vr * s2unit);
	
	s1 = Craft1.vPosition - Craft2.vPosition;
	s1unit = s1;
	s1unit.Normalize();
	u1 = VRotate2D(-Craft2.fOrientation, s1);
	t1 = s1.Magnitude()/(Vr * s1unit);

	if(t1 < 0.0)
	{
		u = u2;
		Target = s2 + Craft2.vPosition;
	} else if(t2 < 0.0) {
		u = u1;
		Target = s1 + Craft2.vPosition;
	} else if(t2 < t1)
	{
		u = u2;
		Target = s2 + Craft2.vPosition;
	} else {
		u = u1;
		Target = s1 + Craft2.vPosition;
	}
	u.Normalize();

	if(u.x < -_TOL)
		p = true;
	else if(u.x > _TOL)
		s = true;

	Craft2.SetThrusters(p,s);
}




void	DoCraft2InterceptAlt(void)
{
	Vector	u;
	Vector	s1, s2, s12;
	bool	p = false;
	bool	s = false;
	double	tClose;	
	Vector	Vr12;
	double	vr;
	
	// turn around if we get ahead of the prey...
	s12 = Craft1.vPosition - Craft2.vPosition;
	u = VRotate2D(-Craft2.fOrientation, s12);
	if(u.y < -_TOL)
	{
		//if(GetRandomNumber(0, 10, true) < 5)
			p = true;
		//else
		//	s = true;
		Craft2.SetThrusters(p,s);
		Target = Craft2.vPosition;
		return;
	}

	Vr12 = Craft1.vVelocity-Craft2.vVelocity; // closing velocity
	s12 = Craft1.vPosition - Craft2.vPosition; // range to close
	tClose = s12.Magnitude() / Vr12.Magnitude(); // time to close

	s1 = Craft1.vPosition + (Craft1.vVelocity * tClose);
	Target = s1;
	s2 = s1 - Craft2.vPosition;	
	u = VRotate2D(-Craft2.fOrientation, s2);	

	u.Normalize();
	if(u.x < -_TOL)
		p = true;
	else if(u.x > _TOL)
		s = true;

	Craft2.SetThrusters(p,s);
	
}



void	DoAttractCraft2(void)
{
	// Apply Lenard-Jones potential force to Craft2
	Vector	r = Craft2.vPosition - Craft1.vPosition;
	Vector  u = r;

	u.Normalize();

	double  U, A, B, n, m, d;

	A = 2000;
	B = 4000;
	n = 2;
	m = 3;
	d = r.Magnitude()/Craft2.fLength;
	U = -A/pow(d, n) + B/pow(d, m);
	
	Craft2.Fa = VRotate2D( -Craft2.fOrientation, U * u);	
	
	Craft2.Pa.x = 0;
	Craft2.Pa.y = Craft2.fLength / 2;

	Target = Craft1.vPosition;
	
}

Vector	GetVelocityIntersection(void)
{
	double s, t, num, denom;
	Vector	a,b,c,d;

	a = Craft1.vPosition;
	b = a+Craft1.vVelocity;
	c = Craft2.vPosition;
	d = c+Craft2.vVelocity;

	denom = a.x * (d.y-c.y) +
			b.x * (c.y-d.y) +
			d.x * (b.y-a.y) +
			c.x * (a.y-b.y);

	if(denom == 0)
		return Vector(a.x, a.y, 0);

	num =	a.x * (d.y-c.y) +
			c.x * (a.y-d.y) +
			d.x * (c.y-a.y);
	s = num/denom;

	num =	-( a.x * (c.y-b.y) +
			   b.x * (a.y-c.y) +
			   c.x * (b.y-a.y) );
	t = num/denom;

	if( (s >= 0) && (t >= 0) )
		return Vector(a.x+s*(b.x-a.x), a.y+s*(b.y-a.y),0);
	else
		return Vector(a.x, a.y, 0);

}



int GetRandomNumber(int min, int max, bool seed)
{
	int	number;	

	if(seed)
		srand( (unsigned)time( NULL ) );
		
    number = (((abs(rand())%(max-min+1))+min));    
    
    if(number>max)
		number = max;

    if(number<min)
    	number = min;
		
	return number;
}

void	DoCraft2ModulateThrust(void)
{
	Vector	r = Craft1.vPosition - Craft2.vPosition;
	double	dmax = Craft2.fLength * 10;

	if((Craft2.PThrust.Magnitude() > 0) || (Craft2.SThrust.Magnitude() > 0)) // turning
	{
		if(r.Magnitude() > dmax)
			Craft2.ThrustForce = _MAXTHRUST;
		else
			Craft2.ThrustForce = r.Magnitude() / dmax * _MAXTHRUST;
	} else {		
		// todo: check how close we are to target and adjust speed to stay with it
		Craft2.ThrustForce = _MAXTHRUST;
	}

}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产日韩欧美精品| 日韩写真欧美这视频| 欧美三级电影在线观看| 久久日一线二线三线suv| 亚洲精品视频免费观看| 国内外成人在线| 欧美日韩在线三区| 亚洲欧美国产毛片在线| 国产sm精品调教视频网站| 欧美一区永久视频免费观看| 亚洲专区一二三| 不卡视频一二三四| 久久综合久久久久88| 日本欧美在线看| 欧美中文一区二区三区| 最好看的中文字幕久久| 风间由美性色一区二区三区| 精品少妇一区二区三区在线播放| 视频精品一区二区| 欧美在线观看禁18| 中文字幕一区二区三区在线不卡 | 风间由美一区二区av101| 国产精品无人区| 日韩国产在线一| 欧美在线免费观看亚洲| 亚洲日本一区二区三区| aaa欧美色吧激情视频| 国产精品三级视频| 大白屁股一区二区视频| 久久精品视频在线免费观看| 国产精品资源站在线| 欧美变态凌虐bdsm| 精品一区二区三区的国产在线播放 | 99免费精品视频| 国产精品全国免费观看高清| 国产成人精品aa毛片| 国产欧美精品日韩区二区麻豆天美| 久久91精品国产91久久小草| 精品日韩在线一区| 久久激情五月激情| 久久久高清一区二区三区| 国产在线视频不卡二| 欧美精品一区二区三区很污很色的| 久久国产精品免费| 久久九九99视频| 成人午夜精品在线| 中文字幕综合网| 在线视频观看一区| 秋霞影院一区二区| 久久综合视频网| eeuss鲁一区二区三区| 亚洲日本免费电影| 91麻豆精品久久久久蜜臀| 美女爽到高潮91| 日本一区二区高清| 色偷偷久久人人79超碰人人澡| 亚洲一区二区在线播放相泽| 777色狠狠一区二区三区| 国产综合成人久久大片91| 日本一区免费视频| 欧美性做爰猛烈叫床潮| 蜜臀av性久久久久蜜臀aⅴ流畅| 26uuu国产一区二区三区| 97久久久精品综合88久久| 亚洲超丰满肉感bbw| 精品三级在线观看| 色综合天天综合| 麻豆精品蜜桃视频网站| 1区2区3区精品视频| 91精品婷婷国产综合久久竹菊| 国产最新精品免费| 亚洲成人av一区二区| 久久久久久久久久久久电影| 色香色香欲天天天影视综合网 | 一级特黄大欧美久久久| 日韩三级.com| 不卡一区二区在线| 久99久精品视频免费观看| 亚洲乱码中文字幕综合| 亚洲精品一区二区三区在线观看 | 丁香桃色午夜亚洲一区二区三区| 综合久久久久综合| 久久九九99视频| 欧美一区二区三区在线观看| 波多野结衣在线一区| 青青草97国产精品免费观看 | www国产精品av| 91国产视频在线观看| 岛国一区二区在线观看| 男男视频亚洲欧美| 亚洲国产欧美在线| 国产精品国产三级国产有无不卡| 日韩写真欧美这视频| 欧美日韩在线精品一区二区三区激情| 国产乱码字幕精品高清av| 日本在线不卡视频| 一区二区三区四区激情| 欧美国产成人在线| 久久精品网站免费观看| 欧美mv日韩mv国产网站| 欧美一区二区三区日韩视频| 91高清视频在线| www.日本不卡| caoporm超碰国产精品| 国产福利一区在线| 国产一区二区在线免费观看| 喷水一区二区三区| 午夜精品在线视频一区| 亚洲va国产va欧美va观看| 国产精品美女久久久久久久久久久 | 国产精品99久久久久| 精品午夜一区二区三区在线观看| 亚洲国产cao| 亚洲成人午夜电影| 偷窥少妇高潮呻吟av久久免费| 亚洲一卡二卡三卡四卡无卡久久| 中文字幕一区二区不卡| 国产精品高潮呻吟| 日韩伦理av电影| 亚洲激情在线激情| 亚洲午夜久久久久久久久久久| 一区二区免费视频| 亚洲高清免费观看| 免费在线一区观看| 韩国精品主播一区二区在线观看| 激情久久五月天| 国产99久久久精品| 成人动漫中文字幕| 91精品福利在线| 91精品国产免费久久综合| 日韩精品中文字幕在线一区| 久久中文字幕电影| 国产精品天天看| 亚洲一区二区三区四区五区黄| 日韩av一区二区三区四区| 国产一区三区三区| 成av人片一区二区| 在线免费观看视频一区| 日韩欧美国产系列| 国产欧美视频在线观看| 1024成人网色www| 亚洲国产wwwccc36天堂| 国内精品在线播放| 91麻豆国产福利在线观看| 欧美日本一区二区在线观看| 久久综合九色欧美综合狠狠| 欧美国产乱子伦| 午夜av一区二区| 国产精品一区在线观看你懂的| 91在线porny国产在线看| 欧美日韩一区二区在线视频| 久久综合九色综合97_久久久| 成人免费在线播放视频| 日本欧美一区二区三区| 不卡区在线中文字幕| 在线成人午夜影院| 中文字幕一区二区在线播放 | 亚洲地区一二三色| 国产成人免费视频网站| 欧美天堂亚洲电影院在线播放| 精品国产乱码久久久久久老虎| 18成人在线观看| 麻豆国产精品一区二区三区 | 亚洲一区二区高清| 国产激情精品久久久第一区二区| 欧美影院午夜播放| 欧美激情在线一区二区| 日韩电影在线观看一区| 99re这里只有精品首页| 精品噜噜噜噜久久久久久久久试看 | 麻豆精品在线观看| 91丨porny丨户外露出| 久久久五月婷婷| 亚洲不卡av一区二区三区| 99久久精品一区| 久久久久99精品一区| 免费精品99久久国产综合精品| 不卡视频一二三四| 久久久九九九九| 美腿丝袜亚洲综合| 欧美性极品少妇| 1区2区3区欧美| 成人精品视频一区二区三区尤物| 日韩一二三区不卡| 日韩一区精品视频| 在线欧美小视频| 亚洲欧美偷拍三级| 99久久精品免费看| 国产精品福利一区| 国产成人亚洲综合a∨婷婷图片| 日韩精品自拍偷拍| 蜜乳av一区二区三区| 欧美一级片免费看| 午夜精品一区二区三区电影天堂 | 国产婷婷色一区二区三区四区| 五月天婷婷综合| 欧美日韩一二区| 五月天中文字幕一区二区| 欧美艳星brazzers| 午夜视频久久久久久|