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

📄 daoli2view.cpp

📁 用几种规则控制倒立摆的模糊运动的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (7)
		else if((newangle>=-7.5)&&(newangle<0)&&(newspeed>=-60.0)&&(newspeed<-30))
		{
			ya1=-2.0*ax+1,ya2=-2*ax;   //输入隶属度函数的确定
			yb1=2.0*bx+2.0,yb2=-2*bx-1;

			//R[4],R[3]并行推理

			if(bViewRules[4])   //R[4]推理
			{
				if(ya1<yb1)    
				{
					yc1=ya1;
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}

			if(bViewRules[3])   //R[3]推理
			{
				if(ya1<yb2)
				{
					yc2=ya1;
				}
				else
				{
					yc2=yb2;
				}
			}
			else
			{
				yc2=0.0;
			}

			//解模糊
			if(bViewRules[4]||bViewRules[3])
			{
				if(yc1>yc2)
				{
					cx0=0.25*yc1-0.75;
				}
				else
				{
					cx0=-0.25*yc2-0.75;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;

		}
		//state (8)
		else if((newangle>=0)&&(newangle<7.5)&&(newspeed>=0.0)&&(newspeed<30))
		{
			ya1=-2.0*ax+1,ya2=2*ax;   //输入隶属度函数的确定
			yb1=-2.0*bx+1,yb2=2*bx;

			//R[5],R[6],R[9]并行推理

			if(bViewRules[5])   //R[5]推理
			{
				if(ya1<yb1)    
				{
					yc1=ya1;
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}

			if(bViewRules[6])   //R[6]推理
			{
				if(ya1<yb2)
				{
					yc2=ya1;
				}
				else
				{
					yc2=yb2;
				}
			}
			else
			{
				yc2=0.0;
			}

			if(bViewRules[9])   //R[9]推理
			{
				if(ya2<yb1)
				{
					yc3=ya2;
				}
				else
				{
					yc3=yb1;
				}
			}
			else
			{
				yc3=0.0;
			}
			
			//解模糊
			if(bViewRules[5]||bViewRules[6]||bViewRules[9])
			{
				if((yc1>=yc2)&&(yc1>=yc3))
				{
					cx0=-0.25*yc1+0.25;
				}
				else if((yc2>=yc1)&&(yc2>=yc3))
				{
					cx0=0.25*yc2+0.25;
				}
				else
				{
					cx0=0.25*yc3+0.25;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (9)
		else if((newangle>=0)&&(newangle<7.5)&&(newspeed>=-30.0)&&(newspeed<0.0))
		{
			ya1=-2.0*ax+1,ya2=2*ax;   //输入隶属度函数的确定
			yb1=2.0*bx+1,yb2=-2*bx;

			//R[5],R[4],R[9],R[8]并行推理

			if(bViewRules[5])   //R[5]推理
			{
				if(ya1<yb1)    
				{
					yc1=ya1;
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}

			if(bViewRules[4])   //R[4]推理
			{
				if(ya1<yb2)
				{
					yc2=ya1;
				}
				else
				{
					yc2=yb2;
				}
			}
			else
			{
				yc2=0.0;
			}

			if(bViewRules[9])   //R[9]推理
			{
				if(ya2<yb1)
				{
					yc3=ya2;
				}
				else
				{
					yc3=yb1;
				}
			}
			else
			{
				yc3=0.0;
			}

			if(bViewRules[8])   //R[8]推理
			{
				if(ya2<yb2)
				{
					yc4=ya2;
				}
				else
				{
					yc4=yb2;
				}
			}
			else
			{
				yc4=0.0;
			}
			
			//解模糊
			if(bViewRules[5]||bViewRules[4]||bViewRules[9]||bViewRules[8])
			{
				if((yc1>=yc2)&&(yc1>=yc3)&&(yc1>=yc4))
				{
					if(ya1<yb1)
					{
						cx0=-0.25*yc1+0.25;
					}
					else
					{
						cx0=0.25*yc1-0.25;
					}
				}
				else if((yc2>=yc1)&&(yc2>=yc3)&&(yc2>=yc4))
				{
					cx0=-0.25*yc2-0.25;			
				}
				else if((yc3>=yc1)&&(yc3>=yc2)&&(yc3>=yc4))
				{
					cx0=0.25*yc3+0.25;				
				}
				else
				{
					if(ya2<yb2)
					{
						cx0=-0.25*yc4+0.25;
					}
					else
					{
						cx0=0.25*yc4-0.25;
					}
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (10)
		else if((newangle>=0)&&(newangle<7.5)&&(newspeed>=-60.0)&&(newspeed<-30.0))
		{
			ya1=-2.0*ax+1,ya2=2*ax;   //输入隶属度函数的确定
			yb1=2.0*bx+2,yb2=-2*bx-1;

			//R[4],R[3],R[8]并行推理

			if(bViewRules[4])   //R[4]推理
			{
				if(ya1<yb1)    
				{
					yc1=ya1;
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}

			if(bViewRules[3])   //R[8]推理
			{
				if(ya1<yb2)
				{
					yc2=ya1;
				}
				else
				{
					yc2=yb2;
				}
			}
			else
			{
				yc2=0.0;
			}

			if(bViewRules[8])   //R[8]推理
			{
				if(ya2<yb1)
				{
					yc3=ya2;
				}
				else
				{
					yc3=yb1;
				}
			}
			else
			{
				yc3=0.0;
			}
			
			//解模糊
			if(bViewRules[4]||bViewRules[3]||bViewRules[8])
			{
				if((yc1>=yc2)&&(yc1>=yc3))
				{
					cx0=0.25*yc1-0.75;
				}
				else if((yc2>=yc1)&&(yc2>=yc3))
				{
					cx0=-0.25*yc2-0.75;
				}
				else
				{
					cx0=0.25*yc3-0.25;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (11)
		else if((newangle>=0)&&(newangle<7.5)&&(newspeed>=30.0)&&(newspeed<60))
		{
			ya1=-2.0*ax+1,ya2=2*ax;   //输入隶属度函数的确定
			yb1=-2.0*bx+2.0,yb2=2*bx-1;

			//R[6],R[7]并行推理

			if(bViewRules[6])   //R[6]推理
			{
				if(ya1<yb1)    
				{
					yc1=ya1;
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}

			if(bViewRules[7])   //R[7]推理
			{
				if(ya1<yb2)
				{
					yc2=ya1;
				}
				else
				{
					yc2=yb2;
				}
			}
			else
			{
				yc2=0.0;
			}

			//解模糊
			if(bViewRules[6]||bViewRules[7])
			{
				if(yc1>yc2)
				{
					cx0=-0.25*yc1+0.75;
				}
				else
				{
					cx0=0.25*yc2+0.75;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;

		}
		//state (12)
		else if((newangle>=7.5)&&(newangle<15)&&(newspeed>=0.0)&&(newspeed<30))
		{
			ya1=-2.0*ax+2,ya2=2*ax-1;   //输入隶属度函数的确定
			yb1=-2.0*bx+1.0,yb2=2*bx;

			//R[9],R[10]并行推理

			if(bViewRules[9])   //R[9]推理
			{
				if(ya1<yb1)    
				{
					yc1=ya1;
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}

			if(bViewRules[10])   //R[10]推理
			{
				if(ya2<yb1)
				{
					yc2=ya2;
				}
				else
				{
					yc2=yb1;
				}
			}
			else
			{
				yc2=0.0;
			}

			//解模糊
			if(bViewRules[9]||bViewRules[10])
			{
				if(yc1>yc2)
				{
					cx0=-0.25*yc1+0.75;
				}
				else
				{
					cx0=0.25*yc2+0.75;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;

		}
		//state (13)
		else if((newangle>=7.5)&&(newangle<15)&&(newspeed>=-30.0)&&(newspeed<0))
		{
			ya1=-2.0*ax+2,ya2=2*ax-1;   //输入隶属度函数的确定
			yb1=2.0*bx+1,yb2=-2*bx;

			//R[9],R[8],R[10]并行推理

			if(bViewRules[9])   //R[9]推理
			{
				if(ya1<yb1)    
				{
					yc1=ya1;
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}

			if(bViewRules[8])   //R[8]推理
			{
				if(ya1<yb2)
				{
					yc2=ya1;
				}
				else
				{
					yc2=yb2;
				}
			}
			else
			{
				yc2=0.0;
			}

			if(bViewRules[10])   //R[10]推理
			{
				if(ya2<yb1)
				{
					yc3=ya2;
				}
				else
				{
					yc3=yb1;
				}
			}
			else
			{
				yc3=0.0;
			}
			
			//解模糊
			if(bViewRules[9]||bViewRules[8]||bViewRules[10])
			{
				if((yc1>=yc2)&&(yc1>=yc3))
				{
					cx0=-0.25*yc1+0.75;
				}
				else if((yc2>=yc1)&&(yc2>=yc3))
				{
					cx0=-0.25*yc2+0.25;
				}
				else
				{
					cx0=0.25*yc3+0.75;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (14)
		else if((newangle>15)&&(newspeed>=-30)&&(newspeed<30))
		{
			if(bx<0)               //输入隶属度函数的确定
			{
				yb1=1+2.0*bx;
			}
			else
			{
				yb1=1-2.0*bx;
			}

			//R[10]
			if(bViewRules[10])       //推理
			{	
				yc1=yb1;		
			}
			else
			{
				yc1=0.0;
			}
			
			if(bViewRules[10])       //解模糊
			{
				cx0=0.25*yc1+0.75;
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (15)
		else if((newangle>=-7.5)&&(newangle<7.5)&&(newspeed<-60))
		{
			if(ax<0)               //输入隶属度函数的确定
			{
				ya1=1+2.0*ax;
			}
			else
			{
				ya1=1-2.0*ax;
			}

			//R[3]
			if(bViewRules[3])       //推理
			{	
				yc1=ya1;		
			}
			else
			{
				yc1=0.0;
			}
			
			if(bViewRules[3])       //解模糊
			{
				cx0=-0.25*yc1-0.75;
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (16)
		else if((newangle>=-7.5)&&(newangle<7.5)&&(newspeed>=60))
		{
			if(ax<0)               //输入隶属度函数的确定
			{
				ya1=1+2.0*ax;
			}
			else
			{
				ya1=1-2.0*ax;
			}

			//R[7]
			if(bViewRules[7])       //推理
			{	
				yc1=ya1;		
			}
			else
			{
				yc1=0.0;
			}
			
			if(bViewRules[7])       //解模糊
			{
				cx0=0.25*yc1+0.75;
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (17)
		else if((newangle>=-15)&&(newangle<-7.5)&&(newspeed>=30)&&(newspeed<60))
		{
			 //输入隶属度函数的确定
			ya1=-2.0*ax-1.0,ya2=2.0*ax+2;
			yb1=-2.0*bx+2.0,yb2=2.0*bx-1;
			
			//R[2]
			if(bViewRules[2])       //推理
			{	
				if(ya2<yb1)
				{
					yc1=ya2;		
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}
			
			if(bViewRules[2])       //解模糊
			{
				if(ya2<yb1)
				{
					cx0=0.25*yc1-0.25;
				}
				else
				{
					cx0=-0.25*yc1+0.25;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		//state (18)
		else if((newangle>=7.5)&&(newangle<15)&&(newspeed>=-60)&&(newspeed<30))
		{
			 //输入隶属度函数的确定
			ya1=-2.0*ax+2.0,ya2=2.0*ax-1;
			yb1=2.0*bx+2.0,yb2=-2.0*bx-1;
			
			//R[8]
			if(bViewRules[8])       //推理
			{	
				if(ya1<yb1)
				{
					yc1=ya1;		
				}
				else
				{
					yc1=yb1;
				}
			}
			else
			{
				yc1=0.0;
			}
			
			if(bViewRules[8])       //解模糊
			{
				if(ya1<yb1)
				{
					cx0=0.25*yc1-0.25;
				}
				else
				{
					cx0=-0.25*yc1+0.25;
				}
			}
			else
			{
				cx0=0.0;
			}

			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;
		}
		else
		{
			ya1=0.0,ya2=0.0;        //还原输入中间变量
			yb1=0.0,yb2=0.0;
			yc1=0.0,yc2=0.0,yc3=0.0,yc4=0.0;

			cx0=0.0;
		}

		dcarF=10.0*cx0;

		double newpaiangle=newangle*3.1415926/180.00;
		double ddangle=(1.1*9.8*sin(newpaiangle)-cos(newpaiangle)*(dcarF+0.1*0.5*newspeed*newspeed*3.14159*3.14159*sin(newpaiangle)/180.0/180.0))*180.0/3.14159/(4.0*1.1*0.5/3.0-0.1*0.5*cos(newpaiangle)*cos(newpaiangle));
		
		dVpolespeed=ddangle*0.02+dVpolespeed;
		dVpoleangle=dVpolespeed*0.02+dVpoleangle;


}

⌨️ 快捷键说明

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