На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
Страницы: (4) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Создание упругого трехмерного шара... , Моделирование упругого удара...
    Очень нужно забацать лабораторную работу. Она заключается в том, что о плоскость ударяется упругий шар. Упругий это означает что при ударе он деформируется. Постепенно он должен успокоиться и не прыгать. Такую фигню надо написать на чистом Turbo Pascal'e. Начал копать инфу - нигде нет никакой инфы по созданию трехмерных объектов. В связи с этим нескольких вопросов:
    1. Подскажите, пожалуйста, где можно найти инфу по созданию трехмерных объектов в паскале.
    2. Нашел несколько работ:
    а) http://pascal.sources.ru/tmt/samples/bounce.zip - практически то что надо (только шар не останавливается). Но работа написана с применением opengl и под другой компилятор. А так низзя... Возможно кто-нибудь посоветует как переписать это чудо.
    б) http://pascal.sources.ru/demo/ball.zip - просто крутится в воздухе. Такую фигню было бы очень прикольно переписать. Чтобы падал и деформировался.
    в) Еще Passrc.zip (ссылку найти не могу) - то что надо только не деформируется.
    Помогите пожалуйста. Знакомый программер болеет и вежливо посылает меня. Как с чего начать???Реально ли эти проги переписать... ПОсоветуйте пожалуйста... Заранее благодарю...
      Надо спросить у wormball. Он точно знает %)
      З.Ы. А почему именно трехмерный ? Так поставлено условие задачи ?
      Сообщение отредактировано: Some1 -
        Цитата Some1 @ 13.12.03, 13:17
        Надо спросить у wormball. Он точно знает %)
        З.Ы. А почему именно трехмерный ? Так поставлено условие задачи ?
        Да такая задача.
        1. Должен быть трехмерный шар и плоскость.
        2. Шар должен ударяться о плоскость упруго (т.е. деформироваться при ударе).
        3. В конце шар должен прекратить свое движение.

        А как спросить у wormball??? Написать ему приватное сообщение??? Не нагловато будет???

        Да еще нашел ссылку на PASSRC.ZIP ( http://www.programmist.info/pub/PASSRC.ZIP )... Но это так между делом...
          Будет не нагловато, если ты вежливо попросишь. Кинь ему в сообщении линк на тему, и попроси посмотреть.
            Ты паскаль знаешь? С 3Д когда нить работал?
            Вопросик по задаче: шар деформируется только теноретически или же это должно отображаться на екране? 3д перспективное или изометрическое?
              Цитата (Tosha @ 13.12.03, 18:23)
              Ты паскаль знаешь? С 3Д когда нить работал?
              Вопросик по задаче: шар деформируется только теноретически или же это должно отображаться на екране? 3д перспективное или изометрическое?

              В том все и дело что нет... Есть опыт работы на Perl немного на C. Но pascal + 3d - никогда. Т.е. сам паскаль то знаю, а вот 3d уже нет. Основная сложность - отсуствие документации... И плохое понимание работы с графикой в паскале. Начал домогаться своего знакомого программера - от сказал что в примере PASSRC.ZIP сделать деформацию нереально - проще переписывать заново. С текстурами ничего неясно... Вот так-то все печально...
              Деформирование шара должно отображаться на экране.
              Повторюсь но идеал http://pascal.sources.ru/tmt/samples/bounce.zip . Очень все четко работает.
              По поводу перспективного и изометрического не понял... Поясни plz...
                Я имею ввиду 3д в какой проекции перспективноу (z-вглубь, х-вправо, у-вверх) или изометрическое (z-вверх а остальные оси под 120 градусов друг к другу). Текстуры чтоли тоже надо?
                  Цитата
                  Some1, 13.12.03, 13:17
                  Надо спросить у wormball. Он точно знает %)

                  насоветуешь ещё.... smile.gif
                  по графике ничем не могу помочь, разве что в виде линий, а текстурировать я не умею. а чтобы он деформировался - ето можно. смысл такой: шар задаётся в виде футбольного мяча, ну тоесь фигуры с 60 вершинами. получается массив из 60 точек в трёхмерном пространстве и связей между ними. далее постулируешь, что связи - ето пружинки, а вершины - ето точечные массы, и что со стороны центра шара действует постоянная сила давления воздуха, а при соприкосновении с землёй действует сила отталкивания от земли, ну и хорошо бы не забыть про силу тяжести. ну и рассчитываешь всё ето механикой. а потом на ето можно и текстуры натянуть.

                  не знаешь как рассчитывать механику - спрашивай
                    да кстати. готовый футбольный мяч http://enzyme.nm.ru/files/football.ent
                      Вот у меня есть такой исходник на Делфи: http://albom.nm.ru/ball.rar
                      Переделать его под TP7 в общем довольно просто. Необходимо выкинуть все что отностится к WinApi и OpenGL, и написать одну функцию проекции точки на экран. Вот вроде и все.
                      Если подойдет, то смело обращайся, если что в нем будет не ясно.
                        Я спрашиваю. %))) ты хорошё знаешь механику. Всегда завидовал %))))
                        Мне бы хотябы основные сведения. Ты хоть скажи, где это в доступной форме изложено. Или изложи основы сам. %)
                          Ребят, спасибо большое... Еще спасибо уважаемому xxxnnn, который написал мне некоторые рекомендации по мылу... Буду думать и стараться...
                          Да только у пользователя albom не скачивается его мяч... (если не сложно - скинь на мыло - arkhangel(собака)mail.ru )... Еще раз всех благодарю... искренне...
                            Цитата
                            Some1, 15.12.03, 20:47
                            ты хорошё знаешь механику.
                            не! хорошо знать механику я буду, когда смоделирую велосипед smile.gif
                            а действительно хорошо знает механику vot какой мужик: http://graphics.stanford.edu/~fedkiw/
                            в алгоритмах c300g ссылку дал
                            Цитата
                            Some1, 15.12.03, 20:47
                            Ты хоть скажи, где это в доступной форме изложено

                            в учебниках по физике smile.gif
                            напр есть такой савельев, там насколько я помню всё в доступной форме, для нефизических специальностей вузов. ну или ландау лифшиц, там в недоступной форме для физических специальностей smile.gif .

                            собственно в расчёте системы материальных точек нет ничего сложного. у тебя есть два массива трёхмерных векторов: координаты точек q и их скорости v, и один массив с массами. вектор задаётся приблизительно так:
                            type vec3d=array [0..2] of single;
                            или
                            type vec3d=record
                              x, y, z: single;
                            end;
                            мне лично больше нравится первый вариант, ибо можно написать for x:=0 to 2 do v[x]..... .
                            также у тебя есть массив пружинок:
                            type spring=record
                             node1, node2: integer; k, len: single;
                            end;
                            , где node1 и node2 - номера связанных точек, k - жёсткость, len - равновесная длина пружинки. или можно задать пружинки подругому, главное чтобы были определены параметры k и len.
                            сначала рассчитываешь силу, действующую на каждую точку. если две точки соединены пружинкой, то на каждую действует сила, пропорциональная разности расстояния между точками и равновесной длины с коэффициентом пропорциональности k:
                            dist:=sqrt(sqr(q[node1, 0]-q[node2, 0])+sqr(q[node1, 1]-q[node2, 1])+sqr(q[node1, 2]-q[node2, 2]));
                            f:=k*(dist-len);
                            . но ето ещё полдела. надо силу пересчитать в приращение скорости. здесь надо знать направление силы. в нашем случае она направлена по оси, соединяющей точки, поетому чтобы получить координатные составляющие, надо силу умножить на направляющие косинусы, а приращение скорости равно силе, делённой на массу и умноженному на временной шаг dt:
                            for x:=0 to 2 do begin
                              v[node1, x]+:=(q[node2, x]-q[node1, x])/dist*f/m[node1]*dt;
                              v[node2, x]+:=(q[node1, x]-q[node2, x])/dist*f/m[node2]*dt;
                            end;
                            тут главное не перепутать полярность, ибо иначе пружина будет не стягивать, а отталкивать.
                            при соприкосновении с субстратом (предположим, что ето происходит когда z<0) действует сила реакции опоры, можно её представить пропорциональной степени погружения с коеффициентом n:
                            for y:=0 to node_n-1 do if q[y, 2]<0 then v[y, 2]+:=-q[y, 2]*n/m[y]*dt;

                            в общем случае ето может быть негоризонтальная поверхность, да и вобще могут сталкиваться два многогранника, так что сила реакции опоры может быть и не такой.
                            ещё хорошая сила - сила трения. она пропорциональна скорости с некоторым коеффициентом b, а приращение скорости записывается так:
                            for x:=0 to 2 do v[y, x]-:=v[y, x]*b*/m[y]*dt
                            .
                            ну и главная сила - сила тяжести smile.gif
                            v[y, 2]-:=g*dt


                            собственно можно придумывать собственные силы, напр в нашем случае нам нужно давление воздуха внутри шара. мы конечно не будем углубляться в тонкости газодинамики и примем (заметьте, от балды!!), что сия сила постоянна по модулю и действует со стороны центра шара. центр же определяется так:
                            for x:=0 to 2 do begin
                              qc[x]:=0;
                              for y:=0 to node_n-1 do qc[x]+:=q[y, x]/node_n;
                            end;

                            а само приращение скоростей
                            dist:=sqrt(sqr(q[y, 0]-qc[0])+sqr(q[y, 1]-qc[1])+sqr(q[y, 2]-qc[2]));
                            v[y, x]+:=(q[y, x]-qc[x])/dist*p/m[y]*dt


                            наконец, когда все силы посчитаны, надо посчитать приращения координат:
                            for x:=0 to 2 do for y:=0 to node_n-1 do q[y, x]+:=v[y, x];

                            и мы можем с чистой совестью сказать, что совершили один шаг численного интегрирования уравнений ньютоновской механики методом верлета.

                            етим методом хорошо считать молекулы: http://moldyn.ru/bioinzhenerija/doc/stat/moldyn.htm
                            собственно я в етой лаборатории делаю курсовую.
                            а более сложные обьекты вроде велосипеда уже не представишь в виде системы материальных точек: ето уже будет система твёрдых тел, и если моделировать твёрдое тело системой точек, то там появляются гигантские жёсткости, и требуется очень маленький шаг интегрирования. что особенно неприемлемо, когда ты хочешь сделать реал-тайм симулятор велосипеда. собственно такие системы тоже можно моделировать с помощью механики твёрдого тела, но я ещё не очень её освоил. там надо расписывать уравнения относительно моментов импульса, вращать поразному, хотя если пару дней целиком посвятить расписыванию, обязательно чтото получится.

                            а как моделировать жидкости или газы - ето я и в страшном сне представить не могу ph34r.gif
                              =8-[ ]

                              Cнимаю шляпу, профессор. %))))) Мне понимание сего не дано. Примерно после 3-4 выкладки тега CODE я начал терять смысл написанного %))) Кошмар !! Я даже не представляю, как это можно всё понимать. Остаётся кусать локти и ругать про себя дебильного учителя по физике в школе, который не смог нормально привить мне любви к этому предмету с самого начала.

                              :'''''(

                              З.Ы. Я ТОЖЕ ТАК ХОЧУУУУУУ.... %'''''((((((
                                Цитата
                                Some1, 17.12.03, 17:39
                                и мы можем с чистой совестью сказать, что совершили один шаг численного интегрирования уравнений ньютоновской механики методом верлета.

                                То бишь после такого шага нужно пересчитать координаты всех точек, умножив вычисленные вектора скоростей на dt<<1 и наконец нарисовав несчастный футбольный мяч с помощью банального line(x1,y1,x2,y2) laugh.gif И все сначала... smile.gif
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0800 ]   [ 15 queries used ]   [ Generated: 26.04.24, 02:14 GMT ]