Добрый день!
задали задачку по компьютерному моделированию, сейчас даже не знаю как ее решить.
суть задачи в следующем:
дана 3д модель самолета, самолет находится в 3д пространстве x-y-z.
Существует программа (алгоритм написанный на делфи) который в зависимости от времени (t, меняющееся от 0 до 100сек) выдает углы наклона самолета. в процессе работы программы самолет должен менять в 3д свое положение относительно осей координат.
используя програмку Macromedia Director MX 2004,
я сейчас сделал самолет вращающийся по нажатию клавишь,
скрипт в Macromedia Director MX 2004:
Код:
Код |
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 раз за время работы программы):
Код:
Код |
t:=0; fi_t:=1;
fi:=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)*si n(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(ga m)*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)+si n(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*g am))- 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_g am+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*(s in(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*g am)*(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));
|
Теперь цикл который повторяется и меняет положение углов (повторяется много раз):
Код:
Код |
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(g am)-del_o*sin(gam))*del_0+ J_x*(del_fi*sin(gam)*sin(O)+del_O*cos(gam))*(del_fi*sin(gam)*sin(O)+de l_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)*s in(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)-d el_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)-de l_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_de l_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:
http://depositfiles.com/files/haf9cmo0jJ_x, J_y, J_z, fi,gam,O должны задаваться в окне зд самолета.
Пожалуйста эксперты ПОМОГИТЕ!!!
Из языков программирования знаю только делфи. Как формулы можно вставить в Macromedia Director MX?
Это сообщение отредактировал(а) Norfonzor - 23.4.2009, 17:36