используя програмку Macromedia Director MX 2004,
я сейчас сделал самолет вращающийся по нажатию клавишь,
скрипт в Macromedia Director MX 2004:
Code:
on enterFrame me
if keyPressed ("a") then
member ("boing5").model("plane").rotate(0,2,0)
end if
if keyPressed ("d") then
member ("boing5").model("plane").rotate(0,-2,0)
end if
if keyPressed ("w") then
member ("boing5").model("plane").rotate(2,0,0)
end if
if keyPressed ("s") then
member ("boing5").model("plane").rotate(-2,0,0)
end if
if keyPressed ("q") then
member ("boing5").model("plane").rotate(0,0,2)
end if
if keyPressed ("e") then
member ("boing5").model("plane").rotate(0,0,-2)
end if
if keyPressed ("r") then
member("boing5").resetWorld( )
end if
end
у меня задан цикл в котором происходит высчитывание углов ox, oy, oz.
в начале высчитываются определители импульсов (1 раз за время работы программы):
Code:
t:=0;
fi:=1;
fi_t:=1;
gam:=1;
O:=1;
p_fi:=
j_x*(fi_t*sin(gam)*sin(O)+O_t*cos(gam))*sin(gam)+J_y*(fi_t*cos(gam)*sin(O)-O_t*sin(gam))*cos(gam)+
J_z*(fi_t*cos(O)+gam_t)*cos(O);
p_gam:=J_z*(fi_t*cos(O)+gam_t);
p_O:=j_x*(fi_t*sin(gam)*sin(O)+O_t*cos(gam))*cos(gam)-J_y*(fi_t*cos(gam)*sin(O)-O_t*sin(gam))*sin(gam);
del_0:=0.5*J_x*J_X*J_Z*(3-cos(4*gam))*sin(O)+0.5*J_X*J_Y*J_Z*(3+cos(4*gam))*sin(O)+J_Z*J_Z*(J_X+J_Y)*
(1-cos(2*gam))*(1-cos(2*O))+0.5*J_y*J_y*J_Z*(1-cos(4*gam))-
0.5*(1-cos(4*gam))*({} (J_X*J_X*J_Z-J_x*J_Y*J_Z)*cos(O)+(J_Y*J_Y*J_Z-J_X*J_Y*J_Z)*sin(O) )-
0.5*({} J_X*J_Z*J_Z*(1+cos(2*gam))+J_Y*J_Z*J_Z*(1-cos(2*gam)) )*(3*cos(O)+cos(3*O));
del_fi:=2*({} J_x*J_Z*(1+cos(2*gam))+J_Y*J_Z*(1-cos(2*gam)) )*p_fi-2*(J_X*J_Z*sin(2*gam)-J_Y*J_z*sin(2*gam))*p_O-
({} J_X*J_Z*(1-cos(2*gam))+J_y*J_Z*(1+cos(2*gam)) )*(1+cos(2*O))*p_O;
del_gam:=({} 0.5*J_x*J_X*(3-cos(4*gam))*sin(O)+0.5*J_X*J_y*(3+cos(4*gam))*sin(O) )*p_gam+
2*({} J_X*J_Z*sin(2*gam)-J_y*J_Z*sin(2*gam) )*cos(O)*p_O-
0.5*(1-cos(4*gam))*({} (J_X*J_X-J_x*J_Y)*cos(O)+(J_Y*J_Y-J_X*J_Y)*sin(O) )*p_gam-
2*({} J_X*J_Z*(1+cos(2*gam))+J_Y*J_Z*(1-cos(2*gam)) )*cos(O)*p_fi; {??? какойто еще "+"}
del_O:=({} J_X*J_z*(1-cos(2*gam))*sin(O)+J_Y*J_Z*(1+cos(2*gam))*sin(O)+J_Z*J_z*(1+cos(2*O)) )*p_O+
0.5*({} J_x*J_z*sin(2*gam)*(3*cos(O)+cos(3*O))-J_Y*J_Z*sin(2*gam)*(3*sin(O)+sin(3*O)) )*p_gam-
({} J_X*J_z*sin(2*gam)*cos(O)-J_y*J_Z*sin(2*gam)*sin(O) )*p_gam-0.5*J_Z*J_Z*(3*cos(O)+cos(3*O) )*p_O;
{5}D_gam_del_0:=2*J_x*(J_x*J_z-J_y*J_z)*sin(4*gam)*sin(O)+2*J_z*J_z*(J_x+J_y)*sin(2*gam)*(1-cos(2*O))+2*J_y*J_y*J_z*sin(4*gam)-
2*sin(4*gam)*({} (J_x*J_x*J_z-J_x*J_y*J_z)*cos(O)+(J_y*J_y*J_z-J_x*J_y*J_z)*sin(O))+J_z*J_z*(J_x-J_y)*sin(2*gam)*
(3*cos(O)+cos(3*O));
{6}D_O_del_0:=0.5*J_X*J_X*J_Z*(3-cos(4*gam))*cos(o)+0.5*J_X*J_Y*J_Z*(3+cos(4*gam))*cos(O)+
2*J_Z*J_Z*(J_x+J_y)*(1-cos(2*gam))*sin(2*o)+0.5*J_Y*J_Y*J_Z*(1-cos(4*gam))-
0.5*(1-cos(4*gam))*( J_X*J_Z*(J_x-J_Y)*sin(O)+J_Y*J_z*(J_x-J_Y)*cos(o))-
1.5*J_z*J_Z*(J_x*J_Z*J_z*(1+cos(2*gam))+J_Y*J_Z*J_Z*(1-cos(2*gam)) )*(sin(o)+sin(3*o));
{7}D_gam_del_fi:=
-4*J_Z*(J_X*sin(2*gam)-J_Y*sin(2*gam))*p_fi-4*J_z*(J_x*cos(2*gam)-J_y*cos(2*gam))*p_o-
2*J_z*(J_x*sin(2*gam)-J_Y*sin(2*gam))*(1+cos(2*O))*p_O;
{8} D_O_Del_fi:=2*J_z*(J_x*(1-cos(2*gam))+J_y*(1+cos(2*gam)) )*sin(2*O*p_O);
{9} D_gam_del_gam:=2*J_x*(J_x*sin(4*gam)*sin(O)-J_y*sin(4*gam)*sin(O))*p_gam+4*J_z*
(J_x*cos(2*gam)-J_y*cos(2*gam))*cos(O)*p_O-2*sin(4*gam)*(1-cos(4*gam))*
((J_x*J_x-J_x*J_y)*cos(O)+(J_y*J_y-J_x*J_y)*sin(O))*p_gam-2*J_z*(J_x*(1+cos(2*gam))+
J_y*(1-cos(2*gam)))*cos(O)*p_fi;
{10} D_O_Del_gam:=0.5*J_x*( J_x*(3-cos(4*gam))*cos(O)+J_y*(3+cos(4*gam) )*cos(O))*p_gam-
2*J_z*(J_x*sin(2*gam)-J_y*sin(2*gam))*sin(O)*p_O+0.5*(1-cos(4*gam))*(J_x*(J_x-J_y)*sin(O)+
J_y*(J_x-J_y)*cos(O) )*p_gam+2*J_z*(J_x*(1+cos(2*gam))+J_y*(1-cos(2*gam)))*sin(O)*p_fi;
{11} D_gam_Del_O:=2*J_z*(J_x*sin(2*gam)-J_y*sin(2*gam))*sin(O)*p_O+J_z*(J_x*cos(2*gam)*(3*cos(O)+
cos(3*O))-J_y*cos(2*gam)*(3*sin(O)+sin(3*O)))*p_gam-J_z*(J_x*cos(2*gam)*cos(O)-
J_y*cos(2*gam)*sin(O))*p_fi;
{12} D_O_Del_O:=J_z*(J_x*(1-cos(2*gam))*cos(O)+J_y*(1+cos(2*gam))*cos(O)-2*J_z*sin(O))*p_O-
(1.5*J_z*(J_x*J_z*sin(2*gam)*(sin(O)+sin(3*O))+J_y*J_z*sin(2*gam)*(cos(O)+cos(3*O))*p_gam))+
J_z*(J_x*cos(2*gam)*cos(O)-J_y*cos(2*gam)*cos(O))*p_fi+(1.5*J_z*J_z*(sin(O)+sin(3*O))*p_O);
{13} D_P_gam_Del_fi:=0;
{14} D_P_fi_Del_O:=0;
{15} D_P_fi_del_fi:=2*(J_x*J_z*(1+cos(2*gam))+J_y*J_z*(1-cos(2*gam)));
{16} D_P_O_del_fi:=-2*J_z*(J_x*sin(2*gam)-J_y*sin(2*gam))-J_z*(J_x*(1-cos(2*gam))+
J_y*(1+cos(2*gam)))*(1+cos(2*O));
{17} D_P_fi_del_gam:=-2*(J_x*J_z*(1+cos(2*gam))+J_y*J_z*(1-cos(2*gam)))*cos(O);
{18} D_P_gam_Del_gam:=0.5*J_x*( 0.5*J_x*(3-cos(4*gam))*sin(O)+J_y*(3+cos(4*gam))*sin(O) )-
0.5*(1-cos(4*gam))*( (J_x*J_x-J_x*J_y)*cos(O)+(J_y*J_y-J_x*J_y)*sin(O) );
{19} D_P_O_Del_gam:=2*(J_x*J_z*sin(2*gam)-J_y*J_z*sin(2*gam))*cos(O);
{20} D_P_gam_del_O:=0.5*J_z*(J_x*sin(2*gam)*(3*cos(O)+cos(3*O))-J_y*sin(2*gam)*(3*sin(O)+sin(3*O)) );
{21} D_P_O_del_O:=J_z*(J_x*(1-cos(2*gam))*sin(O)+J_y*(1+cos(2*gam))*sin(O)+J_z*(1+cos(2*O)))+
0.5*J_z*J_z*(3*cos(O)+cos(3*O));
Теперь цикл который повторяется и меняет положение углов (повторяется много раз):
Code:
repeat
{1}
P_fi_t:=0;
{2} {2 proi3vodnaya}
P_gam_t:=(-1/(2*del_0*del_0))*({} 2*J_x*(del_fi*sin(gam)*sin(O)+del_O*cos(gam))*
(D_gam_del_fi*sin(gam)*sin(O)+del_fi*cos(gam)*sin(O)+D_gam_del_O*cos(gam)-del_o*sin(gam))*del_0+
J_x*(del_fi*sin(gam)*sin(O)+del_O*cos(gam))*(del_fi*sin(gam)*sin(O)+del_O*cos(gam))*D_gam_del_0+
2*J_y*(del_fi*cos(gam)*sin(O)-del_O*sin(gam))*(D_gam_del_fi*cos(gam)*sin(O)+
del_fi*sin(gam)*sin(O)+D_gam_del_O*sin(gam)+del_O*cos(gam))*del_0+
+J_y*(del_fi*cos(gam)*sin(O)-del_O*sin(gam))*(del_fi*cos(gam)*sin(O)-del_O*sin(gam))*D_gam_del_0+
+2*J_z*(del_fi*cos(O)+del_gam)*(D_gam_del_fi*cos(O)+D_gam_del_gam)*del_0+
J_z*(del_fi*cos(O)+del_gam)*D_gam_del_0 ) ;
{3}
P_O_t:=(-1/(2*del_0*del_0))*({} 2*J_x*(del_fi*sin(gam)*sin(O)+del_O*cos(gam))*
(D_O_del_fi*sin(gam)*sin(O)+del_fi*sin(gam)*cos(O) )*del_0+
J_x*(del_fi*sin(gam)*sin(O)+del_O*cos(gam) )*(del_fi*sin(gam)*sin(O)+del_O*cos(gam) )*D_O_del_0+
2*J_y*(del_fi*cos(gam)*sin(O)-del_O*sin(gam) )*(D_O_del_fi*cos(gam)*sin(O)+del_fi*sin(gam)*cos(O) )*del_0+
J_y*(del_fi*cos(gam)*sin(O)-del_O*sin(gam))*(del_fi*cos(gam)*sin(O)-del_O*sin(gam))*D_O_del_0+
2*J_z*(del_fi*cos(O)+del_gam)*(D_O_del_fi*cos(O)-del_fi*sin(O)+D_O_del_gam)*del_0+
J_z*(del_fi*cos(O)+del_gam))*D_O_del_0;
{4}
fi_t:=(1/(del_0))*({} (J_x*(del_fi*sin(gam)*sin(O)+del_O*cos(gam))*sin(gam)*sin(O)*D_P_fi_del_fi+
J_y*(del_fi*cos(gam)*sin(O)-del_O*sin(gam))*cos(gam)*sin(O)*D_P_fi_del_fi+
J_z*(del_fi*cos(O)+del_gam)*cos(O)*D_P_fi_del_fi) );
{5}
gam_t:=(J_z/del_0)*(del_fi*cos(O)+del_gam)*D_P_gam_del_gam;
{6}
O_t:=(1/del_0)*({} (J_x*(del_fi*sin(gam)*sin(O)+del_O*cos(gam))*cos(gam)*D_P_O_del_O+
J_y*(del_fi*cos(gam)*sin(O)-del_O*sin(gam))*sin(gam)*D_P_O_del_O) );
t:=t+0.01;
fi:=fi+fi_t*t;
gam:=gam+gam_t*t;
O:=O+O_t*t;
P_fi:=P_fi+P_fi_t*t;
P_gam:=P_gam+p_gam_t*t;
P_O:=P_O+P_O_t*t;
{СДЕСЬ НАДО ЧТОБЫ САМОЛЕТ ПЕРЕВЕРНУЛСЯ НА УГЛЫ:
0X=fi
0Y=gam
0Z=O
}
until t=120;
Пожалуйста эксперты ПОМОГИТЕ!!!
Из языков программирования знаю только делфи. Как формулы можно вставить в Macromedia Director MX?