![]() |
1. Заголовок темы должен быть информативным. В противном случае тема закрывается и удаляется ...
2. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
3. Одна тема - один вопрос (задача)
4. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Кош |
![]() ![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 1 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Только пожалуйста не надо бить ногами по лицу сразу
![]() Решил я значит заняться одним бесполезным делом - поучиться. И жертву своей учебы я выбрал Macromedia Flash MX 2004 и Аналитическую геометрию. Короче решил на флеше забацать кубик трехмерный с управлением... ![]() Сначала я долго возился с добавлением третьей оси(не мог придумать как это сделать), потом парился с поворотом осей... И вроде бы все работало пока не стал я его тестить. о чудо оно заработало, все крутиться как надо... Но вот только когда повернеш оси на 90 градусов вверх и на 90 градусов влево, и после этого будешь менять начало координат(посмотрим,вверх а потом влево, а потом пойдем вперед ![]() Я конечно понимаю что у меня ошибка в ДНК ![]() Но кто понимает то что я тут написал помогите найти ошибку в коде кубика ![]() Кстати ошибка точно математическая, поэтому в этот раздел и пишу Вот что у меня написано в первом фрейме: Код xc=275; yc=200; ix=0; iy=0; iz=0; koef=500; x=250; y=250; z=250; kx = Array() ky = Array() kz = Array() xnx = Array() ynx = Array() znx = Array() xny = Array() yny = Array() zny = Array() xnz = Array() ynz = Array() znz = Array() gradx=0 grady=0 gradz=0 _root.onEnterFrame = function() { _root.createEmptyMovieClip("myclip",1); function xi(fx,fy,fz){ if (fz<(koef-2)){ xk=fx/(1-(fz/koef)); return xc+xk; } else { return fx/(1-((koef-2)/koef)); } } function yi(fx,fy,fz){ if (fz<(koef-2)){ yk=fy/(1-(fz/koef)); return yc+yk; } else { return fy/(1-((koef-2)/koef)); } } function preobraz_ox(px,py,pz,grx,gry,grz,ii){ cosi1i = Math.cos(Math.PI/180*0) cosj1i = Math.cos(Math.PI/180*90) cosk1i = Math.cos(Math.PI/180*90) cosi1j = Math.cos(Math.PI/180*90) cosj1j = Math.cos(Math.PI/180*grx) cosk1j = Math.cos(Math.PI/180*(270+grx)) cosi1k = Math.cos(Math.PI/180*90) cosj1k = Math.cos(Math.PI/180*(90+grx)) cosk1k = Math.cos(Math.PI/180*grx) xnx[ii]=px*cosi1i+py*cosj1i+pz*cosk1i ynx[ii]=px*cosi1j+py*cosj1j+pz*cosk1j znx[ii]=px*cosi1k+py*cosj1k+pz*cosk1k } function preobraz_oy(px,py,pz,grx,gry,grz,ii){ cosi1i = Math.cos(Math.PI/180*gry) cosj1i = Math.cos(Math.PI/180*90) cosk1i = Math.cos(Math.PI/180*(90+gry)) cosi1j = Math.cos(Math.PI/180*90) cosj1j = Math.cos(Math.PI/180*0) cosk1j = Math.cos(Math.PI/180*90) cosi1k = Math.cos(Math.PI/180*(270+gry)) cosj1k = Math.cos(Math.PI/180*90) cosk1k = Math.cos(Math.PI/180*gry) xny[ii]=px*cosi1i+py*cosj1i+pz*cosk1i yny[ii]=px*cosi1j+py*cosj1j+pz*cosk1j zny[ii]=px*cosi1k+py*cosj1k+pz*cosk1k } function preobraz_oz(px,py,pz,grx,gry,grz,ii){ cosi1i = Math.cos(Math.PI/180*grz) cosj1i = Math.cos(Math.PI/180*(90+grz)) cosk1i = Math.cos(Math.PI/180*90) cosi1j = Math.cos(Math.PI/180*(270+grz)) cosj1j = Math.cos(Math.PI/180*grz) cosk1j = Math.cos(Math.PI/180*90) cosi1k = Math.cos(Math.PI/180*90) cosj1k = Math.cos(Math.PI/180*90) cosk1k = Math.cos(Math.PI/180*0) xnz[ii]=px*cosi1i+py*cosj1i+pz*cosk1i ynz[ii]=px*cosi1j+py*cosj1j+pz*cosk1j znz[ii]=px*cosi1k+py*cosj1k+pz*cosk1k } kx[1] = (-x+ix) ky[1] = (y+iy) kz[1] = (z+iz) kx[2] = (x+ix) ky[2] = (y+iy) kz[2] = (z+iz) kx[3] = (x+ix) ky[3] = (-y+iy) kz[3] = (z+iz) kx[4] = (-x+ix) ky[4] = (-y+iy) kz[4] = (z+iz) kx[5] = (-x+ix) ky[5] = (y+iy) kz[5] = (-z+iz) kx[6] = (x+ix) ky[6] = (y+iy) kz[6] = (-z+iz) kx[7] = (x+ix) ky[7] = (-y+iy) kz[7] = (-z+iz) kx[8] = (-x+ix) ky[8] = (-y+iy) kz[8] = (-z+iz) for (i=1;i<9;i+=1){ preobraz_ox(kx[i],ky[i],kz[i],gradx,0,0,i); } for (k=1;k<9;k+=1){ preobraz_oz(xnx[k],ynx[k],znx[k],0,0,gradz,k); } for (j=1;j<9;j+=1){ preobraz_oy(xnz[j],ynz[j],znz[j],0,grady,0,j); } x1=xi(xny[1],yny[1],zny[1]); y1=yi(xny[1],yny[1],zny[1]); x2=xi(xny[2],yny[2],zny[2]); y2=yi(xny[2],yny[2],zny[2]); x3=xi(xny[3],yny[3],zny[3]); y3=yi(xny[3],yny[3],zny[3]); x4=xi(xny[4],yny[4],zny[4]); y4=yi(xny[4],yny[4],zny[4]); x5=xi(xny[5],yny[5],zny[5]); y5=yi(xny[5],yny[5],zny[5]); x6=xi(xny[6],yny[6],zny[6]); y6=yi(xny[6],yny[6],zny[6]); x7=xi(xny[7],yny[7],zny[7]); y7=yi(xny[7],yny[7],zny[7]); x8=xi(xny[8],yny[8],zny[8]); y8=yi(xny[8],yny[8],zny[8]); myclip.lineStyle(1,0x000000); myclip.moveTo(x1,y1); myclip.lineTo(x2,y2); myclip.lineTo(x3,y3); myclip.lineTo(x4,y4); myclip.lineTo(x1,y1); myclip.lineTo(x5,y5); myclip.lineTo(x6,y6); myclip.lineTo(x7,y7); myclip.lineTo(x8,y8); myclip.lineTo(x5,y5); myclip.lineTo(x6,y6); myclip.lineTo(x2,y2); myclip.lineTo(x3,y3); myclip.lineTo(x7,y7); myclip.lineTo(x8,y8); myclip.lineTo(x4,y4); } А вот что в кнопке управления: Код on (keyPress "a") { ix = ix+2*Math.cos(Math.PI/180*grady); iz = iz-2*Math.sin(Math.PI/180*grady); } on (keyPress "d") { ix = ix-2*Math.cos(Math.PI/180*grady); iz = iz+2*Math.sin(Math.PI/180*grady); } on (keyPress "w") { iz=iz+2*Math.cos(Math.PI/180*(gradx+grady)); iy=iy-2*Math.sin(Math.PI/180*gradx); ix=ix+2*Math.sin(Math.PI/180*grady); } on (keyPress "s") { iz=iz-2*Math.cos(Math.PI/180*(gradx+grady)); iy=iy+2*Math.sin(Math.PI/180*gradx); ix=ix-2*Math.sin(Math.PI/180*grady); } on(keyPress "<Down>"){ gradx+=Math.cos(Math.PI/180*grady); gradz+=Math.sin(Math.PI/180*grady); } on(keyPress "<Up>"){ gradx-=Math.cos(Math.PI/180*grady); gradz-=Math.sin(Math.PI/180*grady); } on(keyPress "<Left>"){ grady+=1; } on(keyPress "<Right>"){ grady-=1; } коэффициент koef=500 подбирал руками, в некоторый момент происходит деление на ноль, но этого незаметно, т.к. "Задние" стенки кубика будут уже "за пределами" экрана(Когда заходим внутрь кубика)... Файлик с кубиком прикрепил 111.rar В общем все ![]() Сообщение отредактировано: Кош - 3.11.2005 13:34 Прикрепленные файлы ![]() -------------------- We are all Kosh...
|
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 4:43 |