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

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

?? skill.cpp

?? 機器人足球AI設計比賽
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/***************************************************************************************** *                                      SEU-3D *                     ------------------------------------------------- * Copyright (c) 2005, Yuan XU<xychn15@yahoo.com.cn>,Chang'e SHI<evelinesce@yahoo.com.cn> * Copyright (c) 2006, Yuan XU<xuyuan.cn@gmail.com>,Chunlu JIANG<JamAceWatermelon@gmail.com> * Southeast University ,China * All rights reserved. * * Additionally,this program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ****************************************************************************************/#include "Skill.h"#include "Logger.h"#include "Formation.h"/*****************************************************************//************************** SKILL ********************************//*****************************************************************/Skill::Skill(){	}Skill::~Skill(){}Vector3f Skill::getPowerForVel( Vector3f driveForce, Vector3f myVel[3], const Vector3f &endVel ){	//endVel = NormalizeVel(endVel);		Vector3f ek = endVel - myVel[0];	Vector3f ek_1 = endVel - myVel[1];	Vector3f ek_2 = endVel - myVel[2];		Vector3f drivePower;	drivePower[0] = velPID( ek[0],ek_1[0],ek_2[0] );	drivePower[1] = velPID( ek[1],ek_1[1],ek_2[1] );	drivePower[2] = 0;	//drivePower = normalizeDriveForce( drivePower );//-* no need -- only for test		drivePower = drivePower + driveForce;	drivePower[2] = 0;	return normalizeDriveForce( drivePower );}const float posPID_thr = 1.9;//1.62;//1.8;Vector3f Skill::getPowerForVel( const Vector3f &endVel ) const{	Vector3f driveForce = WM->getMyDriveForce();	Vector3f myVel[3];	myVel[0] = WM->getMyGlobalVel(0);	myVel[1] = WM->getMyGlobalVel(1);	myVel[2] = WM->getMyGlobalVel(2);		return getPowerForVel( driveForce, myVel, endVel);}float Skill::velPID( float ek, float ek_1, float ek_2 ){	const float Kp = 12;//62;		  float Ki = 10;//100;	const float Kd = 10;//*5;	const float A  = 0.4;	const float B  = 0.1;	if ( abs(ek) <= B)		Ki *= 1;	else		Ki *= ( A - abs(ek) + B )/A;		float Uk;	if ( abs(ek) > A )		Uk = algorithmP( Kp, ek);//P		//Uk = algorithmPD( Kp, Kd, ek, ek_1, ek_2);//PD	else		Uk = algorithmPID( Kp, Ki, Kd, ek, ek_1, ek_2 );//PID	return Uk;}Vector3f Skill::gotoNStop( Vector3f driveForce, Vector3f myVel[3], Vector3f myPos[3], Vector3f endPos ){		Vector3f ek = endPos - myPos[0];	Vector3f ek_1 = endPos - myPos[1];	Vector3f ek_2 = endPos - myPos[2];		Vector3f drivePower,driveSpeed;	if ( ek.Length() < posPID_thr )	{		driveSpeed[0] = posPID( ek[0],ek_1[0],ek_2[0]) + (myVel[0])[0];		driveSpeed[1] = posPID( ek[1],ek_1[1],ek_2[1]) + (myVel[0])[1];		LOG( 12,"driveSpeed: %f, %f",driveSpeed.x(),driveSpeed.y());	}	else	{		driveSpeed = setVector3fLength( ek, 10);		LOG( 12,"full speed!");	}	driveSpeed[2] = 0;		drivePower = getPowerForVel( driveForce, myVel, driveSpeed );	drivePower.z() = 0;		return normalizeDriveForce(drivePower);}Action Skill::gotoNStop( const Vector3f &endPos ) const{	Vector3f driveForce = WM->getMyDriveForce();	Vector3f myPos[3], myVel[3];	myPos[0] = WM->getMyGlobalPos(0);//WM->getMyGlobalPos(0*20);//-* need more test	myPos[1] = WM->getMyGlobalPos(1);//WM->getMyGlobalPos(1*20);	myPos[2] = WM->getMyGlobalPos(2);//WM->getMyGlobalPos(2*20);	myVel[0] = WM->getMyGlobalVel(0);//WM->getMyGlobalVel(0*20);	myVel[1] = WM->getMyGlobalVel(1);//WM->getMyGlobalVel(1*20);	myVel[2] = WM->getMyGlobalVel(2);//WM->getMyGlobalVel(2*20);	Action act;	Vector3f power = gotoNStop( driveForce, myVel, myPos, endPos );	act.setDriveForce( power );	act.setTime( WM->getRealTime() );	return act;}Vector3f Skill::gotoWithMinSpeed( Vector3f driveForce, Vector3f myVel[3], Vector3f myPos[3], Vector3f endPos, float minSpeed ){	Vector3f ek = endPos - myPos[0];	ek.z() = 0;	Vector3f ek_1 = endPos - myPos[1];	Vector3f ek_2 = endPos - myPos[2];		Vector3f drivePower,driveSpeed;	if ( ek.Length() < posPID_thr )	{		driveSpeed[0] = posPID( ek[0],ek_1[0],ek_2[0]) + (myVel[0])[0];		driveSpeed[1] = posPID( ek[1],ek_1[1],ek_2[1]) + (myVel[0])[1];	}	else	{		driveSpeed = setVector3fLength( ek, 10);	}	driveSpeed[2] = 0;		//-* differnt with gotoNStop	if ( driveSpeed.Length() < minSpeed )		driveSpeed = setVector3fLength( ek,minSpeed );	LOG( 12,"driveSpeed: %f, %f, :",driveSpeed.x(),driveSpeed.y());	//float max_agent_speed = 10;	//if ( ek.Length()>1.5 ) driveSpeed = setVector3fLength(driveSpeed,max_agent_speed);		drivePower = getPowerForVel( driveForce, myVel, driveSpeed );		return normalizeDriveForce(drivePower);	}Action Skill::gotoWithMinSpeed( Vector3f endPos, float minSpeed ){	Vector3f driveForce = WM->getMyDriveForce();	Vector3f myPos[3], myVel[3];	myPos[0] = WM->getMyGlobalPos(0);//WM->getMyGlobalPos(0*20);//-* need more test	myPos[1] = WM->getMyGlobalPos(1);//WM->getMyGlobalPos(1*20);	myPos[2] = WM->getMyGlobalPos(2);//WM->getMyGlobalPos(2*20);	myVel[0] = WM->getMyGlobalVel(0);//WM->getMyGlobalVel(0*20);	myVel[1] = WM->getMyGlobalVel(1);//WM->getMyGlobalVel(1*20);	myVel[2] = WM->getMyGlobalVel(2);//WM->getMyGlobalVel(2*20);	Action act;	Vector3f power = gotoWithMinSpeed( driveForce, myVel, myPos, endPos, minSpeed );	act.setDriveForce( power );	act.setTime( WM->getRealTime() );	return act;}float Skill::posPID( float ek, float ek_1, float ek_2){	const float Kp = 5.5;//4;//8;//5;//10;//15;//*3;//4;//km=5;		  float Ki = 0.47;//0.48;//0.45;//0.5;//0.4;//2.0;//1.0;//*0.4;//0.35;//0.3;//0.4;//0.6;//0.8;//1;//2;//3;//*0.574;//0.287*2;	const float Kd = 1.0;//0.5;//2;//1.0;//3;//2;//1.5;//1.0;//0.8;//1.0;//1.1;//1.2;//1.5;//2;//1;//*0.5233;//0.785/1.5;		const float A  = posPID_thr;//1.5;	const float B  = 0.1;	if ( abs(ek) <= B)		Ki *= 1;	else		Ki *= ( A - abs(ek) + B )/A;		float Uk;	if ( abs(ek) > A )		Uk = algorithmP( Kp, ek);//P	else 		Uk = algorithmPID( Kp, Ki, Kd, ek, ek_1, ek_2 );//PID		return Uk;}Action Skill::runStrategicPos() const{	return runStrategicPos( WM->getBallGlobalPos());}Action Skill::runStrategicPos( const Vector3f &posBall) const{	int num = WM->getMyNum();	Vector3f posStrategic = FM->getStrategicPosition( num, posBall );	return gotoNStop( posStrategic );	}//-* the old intercept, which is good in defenceAction Skill::interceptBall0( Vector3f goal ){	Vector3f posIntercept = WM->getInterceptPos( goal );	posIntercept = projectInterceptPos( posIntercept );	Vector3f velEnd(0,0,0);	return runTo( posIntercept, velEnd );}Action Skill::interceptBall( Vector3f goal, const bool isKicking)  const{	//-* const	//-- const of close intercept	const float dist_close_intercept = 1.87;//1.33;//1.87;//1.0f;	const AngDeg ang_close_intercept = 20.42;//18.83;//20.42;//22.5f;	const AngDeg velAng_close_intercept = 5.62;//18.95;//5.62;//45.0f;	const float ball_stop_vel = 1.02;//1.14;//1.02;//1.5f;	//-- const of my end vel	const float my_min_end_speed = 0.52;//0.19;//0.52;//0.35f;		Vector3f posInterceptBall = WM->getInterceptBallPos();	Vector3f posKick = WM->getInterceptPos( goal );	bool isClostIntercept = false;	// close intercept	if ( (WM->getMyGlobalPos()-WM->getBallGlobalPos()).Length() < dist_close_intercept//1.0f 		&& isThreePointOneLine(WM->getMyGlobalPos(),WM->getBallGlobalPos(),goal,ang_close_intercept)//22.5)//15)		&& abs(getClipAng(WM->getBallGlobalVel(),WM->getMyGlobalPos()-goal)) < velAng_close_intercept//45		&& WM->isBallStop(ball_stop_vel)//(1.5f)//(1.0f)//(0.5f)		)	{		isClostIntercept = true;		posInterceptBall = WM->getBallGlobalPos();		posKick = posInterceptBall + (goal-posInterceptBall).Normalized()*kick_pos_dist;	}		AngDeg dribbleAng = getVector3fHorizontalAng(goal-posInterceptBall);	Vector3f newPos = projectDribblePos(WM->getMyGlobalPos(),											posInterceptBall,											dribbleAng);	LOG( 14,"posInterceptBall: %f, %f, %f",posInterceptBall.x(),posInterceptBall.y(),posInterceptBall.z());	LOG( 14,"newPos: %f, %f %f",newPos.x(),newPos.y(),newPos.z());	// for dribble test	// kick_margin/sim_cycle_time	float minSpeed = my_min_end_speed;//0.35;	float speedK = cosDeg(getClipAng(WM->getMyGlobalPos(),newPos,goal));	minSpeed *= speedK;	Vector3f velEnd(0,0,0);	velEnd = goal - posKick;	velEnd = setVector3fLength( velEnd, minSpeed);	Action driveAction = runTo( newPos, velEnd );		//-* 2005-11-12	// very close to the ball, need turn around ball	/*if ( (WM->getMyGlobalPos()-WM->getBallGlobalPos()).Length() < dist2ball_turn_around//0.35f 		&& (WM->getMyGlobalPos()-posKick).Length() < dist2kickPos_turn_around//0.35f		)	{		AngDeg angErr = getClipAng(goal-WM->getBallGlobalPos(),WM->getBallGlobalPos()-WM->getMyGlobalPos());		bool turnClockWise = ( angErr < 0 );		driveAction = turnAroundPos(WM->getBallGlobalPos(),radious_turn_around,turnClockWise);	}	*/	//-* 2005-11-13	// ready to kick, dash to the ball	if ( (  isKicking || shoudIKick(goal))		&& isClostIntercept )	{		driveAction = dashToBall();	}		return driveAction;}Vector3f Skill::projectInterceptPos( Vector3f posIntercept ) const{	//-* geometry algorithm-------------------------	const float block_dist = 0.4;//0.4;//0.33;	Vector3f posMe = WM->getMyGlobalPos();	Vector3f posBall = WM->getBallGlobalPos();	//-* just now, consider 2D only;	posMe[2] = posBall[2] = posIntercept[2] = 0;		//-* may block the ball	float distIntercept = ( posIntercept-posMe).Length();	//LOG( 12,"posBall: %f,%f,%f \tvelBall: %f,%f,%f",posBall[0],posBall[1],posBall[2],WM->getBallGlobalVel()[0],WM->getBallGlobalVel()[1],WM->getBallGlobalVel()[2]);	//LOG( 12,"distIntercept:%f",distIntercept);	//LOG( 12,"distToBall:%f",(posBall-posMe).Length() );	//float const ball_vel_thr = 1.0;	if ( isThreePointOneLine( posMe, posBall, posIntercept, 90 )		&& ( distIntercept - (posBall-posMe).Length() > WM->getBallRadius()*2 ) 		)	{		//LOG( 12,"may block");		float dist = getDistToLine( posBall, posMe, posIntercept );		//LOG( 12,"dist:%f",dist);		if ( fabs(dist) < block_dist )//-* block		{			//LOG( 12,"block!!!!");			AngDeg direction = getVector3fHorizontalAng( posIntercept - posMe );			//LOG( 12,"direction:%f",direction);			direction += sign( dist ) * Rad2Deg( block_dist / distIntercept );			//LOG( 12,"new direction:%f",direction);			direction = normalizeAngle( direction );			//LOG( 12,"new direction:%f",direction);			VisionSense pol;			pol.distance = distIntercept;			pol.theta = direction;			pol.phi = 0;			posIntercept = posMe + getPosRelativeFromVision( pol );		}	}		posIntercept.z() = WM->getMyRadius();	//LOG( 12,"new distIntercept:%f", (posMe-posIntercept).Length());	//LOG( 12,"new dist:%f",getDistToLine(posBall,posMe,posIntercept));	return posIntercept;}Action Skill::runTo( const Vector3f &endPos, const Vector3f &endVel ) const{	Action act;	act.setTime( WM->getRealTime() );	act.setDriveForce( runTo( WM->getMyGlobalPos(), WM->getMyGlobalVel(), endPos, endVel) );	return act;}Vector3f Skill::runTo( const Vector3f &beginPos, const Vector3f &beginVel, const Vector3f &endPos, const Vector3f &endVel) const{	//const float minPowerOneAxes = 0.1;//meaning 10% of maxPower	const float maxPower = max_drive_force;	Vector3f direction = endPos - beginPos;	if ( direction.Length() < 0.005 ) return Vector3f(0,0,0);	Vector3f power = direction.Normalized();	power.x() = abs( power.x());//max( minPowerOneAxes, abs( power.x()));	power.y() = abs( power.y());//max( minPowerOneAxes, abs( power.y()));	power.x() *= getRunPower( beginPos.x(),beginVel.x(),endPos.x(),endVel.x(),maxPower);	power.y() *= getRunPower( beginPos.y(),beginVel.y(),endPos.y(),endVel.y(),maxPower);	power.z() = 0;	return power;}float Skill::getRunPower( const float &x0, const float &v0, const float &xf, const float &vf, const float &maxPower) const{	const float u = 62;	const float m = 30;	//-* float t1 = ((xf-x0)*u +(vf-v0)*m)*0.5/maxPower;	//-- float f = t1/sim_cycle_time*maxPower;	//-- make it simple @2005-11-20-by-XuYuan	float f = ((xf-x0)*u +(vf-v0)*m)*0.5/sim_cycle_time;	if ( abs(f) < maxPower )	{		f = ( 2/(1+exp(-2.5*f/maxPower))-1 )*maxPower;//2//5//3		//f = ( 0.5/( 1+( exp( -abs(f) ) ) ) )*maxPower*sign(f);	}		return setMaxNMin(f,maxPower,-maxPower);}//2005-10-25float Skill::changeSpeed( const float &v0, const float &v1, const float &maxF, float &d, Time &t){	//- const	const float v_gap = 0.5;//0.3;	const float m=30;	const float u=maxF/( real_agent_max_speed + 0.01);//62;	float f=0;	t=0;	d=0;	if ( abs( v1-v0 ) < v_gap )	{    	f = u*v1;    	t= sim_cycle_time;    	d= v1*sim_cycle_time;	}	else	{    	if ( v1 > v0 )        	f = maxF;    	else        	f = -maxF;    	t = m/u*log((u*v0-f)/(u*v1-f));    	//d = m/u*(v0-f/m)*(1-exp(-u/m*t))+f/u*t;		d = m/u*(v0-f/u)*(1-exp(-u/m*t))+f/u*t;	}	//LOG( 13,"cd: v0=%f, v1=%f, f=%f",v0,v1,f);	//LOG( 13,"cs: t=%f ,(u*v0-f)/(u*v1-f)=%f",t,(u*v0-f)/(u*v1-f));	return f;}float Skill::driveTo( const float &x0, const float &v0, const float &xf, const float &vf, const float &maxF, Time &t){	//- const	const float maxSpeed = real_agent_max_speed*maxF/max_drive_force;	const float v_gap = 0.1;	//const float x_gap = 0.1;//0.05;	//- init	float f=0;	float d=0;	t=0;	float dist = abs(xf-x0);	float f_brake,f_dash;	if ( vf*(xf-x0)<0 ) //-- not the same direction	{		float tBack = 0.0f;		changeSpeed(0.0f,vf,maxF,d,tBack);		float new_xf = xf - d;		f = driveTo(x0,v0,new_xf,0.0f,maxF,t);		t += tBack;	}	else //-- the same direction	{		f_brake = changeSpeed(v0,vf,maxF,d,t);		if ( abs(d) >= dist )//--brake    		f = f_brake;		else//-- fish dash, then brake		{			float vm;			float d1=0;			float d2=0;			Time t1=0;			Time t2=0;			if ( dist > 2 )        		vm = sign(xf-x0)*maxSpeed;    		else			{        		float vr = sign(xf-x0)*(maxSpeed+v_gap);        		float vl = 0;        		while ( abs( vl-vr ) > v_gap )				{            		vm = ( vl + vr )*0.5;            		f_dash = changeSpeed(v0,vm,maxF,d1,t1);            		f_brake = changeSpeed(vm,vf,maxF,d2,t2);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
95精品视频在线| 免费人成在线不卡| 91尤物视频在线观看| 国产精品卡一卡二| 99久久99久久免费精品蜜臀| 亚洲天堂中文字幕| 欧美专区在线观看一区| 亚洲电影在线免费观看| 在线不卡免费av| 国产一区二区在线看| 久久精品夜色噜噜亚洲aⅴ| 国产精品一区二区黑丝| 国产精品久久久久久亚洲伦| 日韩亚洲欧美一区| 国产精品一区二区男女羞羞无遮挡 | 国产日韩欧美a| 欧美激情中文不卡| 色噜噜狠狠色综合欧洲selulu| 亚洲一级二级在线| 欧美成人精品二区三区99精品| 9人人澡人人爽人人精品| 精品日韩欧美一区二区| 国产精品自拍网站| 久久91精品国产91久久小草| 香蕉影视欧美成人| 亚洲综合视频网| 亚洲精品国产品国语在线app| 中文欧美字幕免费| 国产亚洲欧美一级| 中文字幕精品一区| 久久久国产精品午夜一区ai换脸| 欧美一区二区三区在线看| 欧美日韩在线三级| 精品视频一区三区九区| 在线国产电影不卡| 91黄视频在线| 91老师国产黑色丝袜在线| 99这里都是精品| 色综合婷婷久久| 99国产精品视频免费观看| 99精品久久免费看蜜臀剧情介绍| 国产成人av电影| 国产在线精品视频| 国产不卡视频一区| 99久久伊人网影院| 91看片淫黄大片一级| 一本高清dvd不卡在线观看| 91在线国产福利| 色94色欧美sute亚洲13| 91福利资源站| 欧美女孩性生活视频| 91麻豆精品国产综合久久久久久| 51精品秘密在线观看| 日韩视频一区二区在线观看| 欧美电视剧在线观看完整版| 久久久一区二区三区| 国产精品乱码人人做人人爱| 亚洲欧美日韩中文字幕一区二区三区| 亚洲色图欧洲色图| 亚洲永久免费视频| 蜜乳av一区二区| 国产不卡视频在线播放| 色噜噜夜夜夜综合网| 欧美久久久久久久久中文字幕| 制服丝袜一区二区三区| 久久亚洲一区二区三区明星换脸| 国产三级欧美三级| 亚洲欧洲精品天堂一级| 亚洲妇女屁股眼交7| 久久精品国产色蜜蜜麻豆| 丁香婷婷综合五月| 欧美在线视频不卡| 欧美www视频| 亚洲天堂精品视频| 日本怡春院一区二区| 成人性生交大片| 欧美日韩国产首页在线观看| 精品国产精品一区二区夜夜嗨| 国产精品三级电影| 日韩国产一二三区| 成人免费视频app| 欧美日韩高清影院| 欧美国产丝袜视频| 亚洲国产色一区| 国产剧情av麻豆香蕉精品| 一本久久综合亚洲鲁鲁五月天| 91精品蜜臀在线一区尤物| 国产女人18毛片水真多成人如厕 | 国产亚洲欧美日韩日本| 亚洲精品一二三四区| 国内精品免费在线观看| 色噜噜狠狠成人网p站| 精品成a人在线观看| 亚洲在线免费播放| 丁香五精品蜜臀久久久久99网站| 欧美日韩成人综合天天影院| 国产精品另类一区| 美腿丝袜亚洲一区| 色呦呦日韩精品| 久久久久免费观看| 视频在线观看91| 色狠狠色狠狠综合| 国产农村妇女精品| 久久av中文字幕片| 欧美色视频在线| 中文字幕一区二区三区四区不卡 | 久久精品国产在热久久| 欧美视频你懂的| 国产精品区一区二区三区| 日本女人一区二区三区| 在线观看日韩电影| 国产精品成人一区二区艾草| 国产一区视频导航| 日韩一区二区在线看片| 亚洲chinese男男1069| 91社区在线播放| 中文字幕精品—区二区四季| 国产在线不卡视频| 中文字幕中文字幕在线一区| 开心九九激情九九欧美日韩精美视频电影 | 日韩欧美在线综合网| 亚洲国产精品人人做人人爽| 91小视频在线免费看| 国产精品成人网| av资源网一区| 中文字幕在线视频一区| 顶级嫩模精品视频在线看| 久久久精品国产99久久精品芒果 | 不卡一区二区在线| 国产欧美精品区一区二区三区| 国产一区二区三区在线看麻豆| 日韩美一区二区三区| 美女看a上一区| 欧美zozo另类异族| 九九国产精品视频| 精品欧美黑人一区二区三区| 六月婷婷色综合| 日韩欧美精品在线| 韩国欧美国产一区| 久久久精品日韩欧美| 福利电影一区二区| 亚洲视频在线观看一区| 欧美亚洲日本一区| 视频一区二区三区入口| 欧美一级高清大全免费观看| 蜜臀久久久99精品久久久久久| 日韩欧美久久久| 国产成人在线视频网站| 国产精品久久久久一区二区三区| 成人av在线资源网站| 伊人开心综合网| 欧美电影影音先锋| 老司机一区二区| 亚洲国产精品成人久久综合一区 | 欧洲av一区二区嗯嗯嗯啊| 亚洲国产aⅴ成人精品无吗| 欧美男人的天堂一二区| 久久精品免费看| 国产女人18毛片水真多成人如厕| caoporm超碰国产精品| 亚洲国产精品久久不卡毛片 | 亚洲精品v日韩精品| 欧美精品三级日韩久久| 国产美女视频91| 亚洲欧美在线视频观看| 欧美日韩精品三区| 国产一区二区毛片| 天天av天天翘天天综合网| 日韩精品中文字幕一区二区三区| 国产高清一区日本| 亚洲免费av观看| 日韩欧美二区三区| av中文字幕一区| 日本亚洲免费观看| 国产精品成人在线观看| 欧美精品一卡两卡| 国产99久久久精品| 亚洲国产va精品久久久不卡综合| 日韩欧美一级二级三级 | 精品国产网站在线观看| 99精品视频在线观看| 免费看日韩精品| 国产精品久久久久久久裸模| 欧美男人的天堂一二区| 波多野洁衣一区| 日韩av一二三| 自拍偷拍欧美精品| 精品国产伦一区二区三区免费 | 国产精品1区2区| 亚洲国产精品久久久男人的天堂| 久久女同精品一区二区| 欧美日韩成人综合天天影院| 成人h精品动漫一区二区三区| 日本免费在线视频不卡一不卡二| 亚洲欧洲成人av每日更新| 精品剧情在线观看| 欧美日韩中文国产| 92国产精品观看| 国产精品资源在线观看| 麻豆一区二区在线|