На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Создание упругого трехмерного шара... , Моделирование упругого удара...
    Очень нужно забацать лабораторную работу. Она заключается в том, что о плоскость ударяется упругий шар. Упругий это означает что при ударе он деформируется. Постепенно он должен успокоиться и не прыгать. Такую фигню надо написать на чистом 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
                                  Цитата
                                  vesper1, 17.12.03, 18:01
                                  То бишь после такого шага нужно пересчитать координаты всех точек, умножив вычисленные вектора скоростей на dt<<1 и наконец нарисовав несчастный футбольный мяч с помощью банального line(x1,y1,x2,y2)  И все сначала... 
                                  точно smile.gif ну можно ещё рисовать не на каждом шаге, а через 10 или более шагов.
                                  Цитата
                                  Some1, 17.12.03, 16:39
                                  Cнимаю шляпу, профессор. %))))) Мне понимание сего не дано

                                  тамбовский волк тебе профессор!! профессор тем и отличается от студента, что может объяснять так, чтобы его понимали.

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

                                  ну есь у тебя точка. как известно, у неё есть три координаты и три скорости. причём координаты изменяются во времени, и производная координаты по времени равна скорости. стало быть чтобы получить координату в следующий момент времени, ты должен к координате прибавить скорость, умноженную на временной промежуток:

                                  x(t+dt)=x(t)+vx*dt.

                                  но скорость меняется во времени, поетому ето получится только линейное приближение, и тем более точное, чем меньше промежуток dt. чтобы узнать скорости на последующем шаге, есь легендарная формула ньютона:

                                  F=m*a
                                  dv/dt=F/m
                                  v(t+dt)=v(t)+F/m*dt

                                  , где F - равнодействующая сила, тоесь сумма всех сил.
                                  всё вроде
                                  Сообщение отредактировано: wormball -
                                    Цитата
                                    wormball, 18.12.03, 17:06
                                    v(t+dt)=v(t)*F/m*dt

                                    v(t+dt)=v(t)+dt*F/m :) иначе несколько раз умножишь и лопнет твой шарик :)
                                      исправил
                                      только она не лопнет, а наоборот остановится, ведь dt маленькое smile.gif
                                        В целом уже понятнее %) Но ещё требует осмысления. Тем более практического. %)

                                        Равнодействующая сила - это что такое ?
                                          Равнодействущая сила... хм, Some1 а ты физику в школе пинал? biggrin.gif Это "виртуальная" сила, действие которой на тело (в данном случае точку) эквивалентно действию всех сил, которые на нее воздействуют. То есть чтобы не считать все силы по отдельности, берут их и складывают и результат есть равнодействующая.
                                            Цитата
                                            vesper1, 19.12.03, 08:44
                                            Это "виртуальная" сила

                                            ну не такая уж и виртуальная smile.gif
                                            по крайней мере не более виртуальная, чем все её составляющие
                                              Читай пост с начала. Там написано и про физику, и про школу :**((( Я примерно себе представляю, что такое равнодействующая. Но сила - это вобще виртуальное понятие. В нашем случае все силы представляют собой: вектор направления действия силы и число - сила воздействия силы. Так ? Я не знаю, как это всё в терминах. И равнодействующая сила должна быть суммой всех этих векторов, так ? А числовое значение этой силы как должно считаться ? То, которое обозначает, как сильно эта сила действует на тело ?
                                                Цитата
                                                Some1, 19.12.03, 15:03
                                                В нашем случае все силы представляют собой: вектор направления действия силы и число - сила воздействия силы

                                                сила представляет собой просто вектор, а у вектора уже есь модуль и направление. ну или три координаты. собственно она такой же вектор, как и координата точки и её скорость. но в ряде случаев, как например с пружинкой, нам проще сначала посчитать модуль и направление, а потом посчитать три компоненты, непосредственно нужные для расчёта. если M - модуль силы, а r - её направление, то сама сила равна

                                                                    _      _
                                                                    F=M*r/|r|

                                                , где || - модуль, а чёрточка над буквой - знак того, что ето вектор. а в других случаях, как напр с силой трения, мы можем сразу вычислять компоненты вектора.

                                                накопал в инете небольшую статью: http://www.komi.com/DFSH/study/lessons/lesson01/lesson01.htm
                                                накопал я её в даже не знаю как назвать, нечто среднее между поисковиком и сборником статей. http://en.edu.ru/db/msg/35325/_sp/3368/1410
                                                называестя "естественнонаучный образовательный портал"
                                                возможно там и про велосипед есь, и про жидкости
                                                  зы. там же откопал
                                                  http://images.en.edu.ru/pubs/2003/09/13/00...048/kvatern.pdf
                                                  похоже ето то, что поможет мне с велосипедом
                                                    Буду читать %)
                                                      Цитата
                                                      Some1, 19.12.03, 16:03
                                                      Там написано и про физику, и про школу :**(((

                                                      Айм сорри sad.gif До сих пор вспоминаю нашего физика... в аттестате у меня единственного была пятерка, даже у одной девушки, которая получила серебрянную медаль, и то 4 unsure.gif
                                                        [offtopic]оценки ето вселенское зло!! всё что было сказано во флейме относительно рейтингов и статусов, в полной мере относится к оценкам, даже ещё в большей степени! я лично по возможности сру на оценки, в школе ето получалось замечательно, а в универе троечникам стипендию не платят, и в аспирантуру говорят нужен красный диплом sad.gif
                                                        невидать мне похоже аспирантуры[/offtopic]
                                                          Ладно. В полном руководстве по схеме от wormball у меня получилось вот что: (jumpball.zip, его нужно еще собрать) В параметре к программе указывается фигура (*.dat) которая и будет прыгать. По крайней мере куб прыгает более-менее устойчиво smile.gif Шарик (board.dat, кусочек указки) тоже прыгает, правда почти незаметно. Но вот с тором полный П, в смысле провал © smile.gif Он просто выворачивается наизнанку. Под конец я заставил прыгать букву К (k.dat), она повеля себя мягко скажем ужасно. Я так понимаю, чтобы фигура была жесткой, имеющихся пружин мало (они прокладываются по ребрам граней фигуры). К тому же возникла полная незадача с давлением, я его отключил. Для шара вроде пашет, все остальное коллапсирует после прыжка sad.gif blink.gif
                                                          Буду признателен, если поможете.
                                                          Кстати, автор куда-то пропал.

                                                          Да, вот еще. Просьба не бить smile.gif за кривой код и формат файла. Все это писалось 7 лет назад, на машграф, где ни о какой деформации речи не было. Код заливки по Гуро оттуда же.
                                                          Сообщение отредактировано: vesper1 -

                                                          Прикреплённый файлПрикреплённый файлjumpball.zip (33.86 Кбайт, скачиваний: 170)
                                                            Потому и выворачивает, что нет внутреннего давления. Но для объектов, отличных от шара внутреннее давление расчитать наверно будет куда сложнее. В разных местах такого объекта давление по идее должно быть разным. Или направлено по разным осевым. для фигут типа буквы К вобще задача ещё больше усложняется. Основное правило, которое должно соблюдаться - фигура должна быть выпуклой, тоесть не образовывать из своих плоскостей углов вовнутрь.
                                                              Я тут подумал над этим ночью smile.gif придумал вот что: Фигура выворачивается из-за того, что не соблюдаются углы между гранями (т.е. когда параллельные пружины встают буквой V, они не действуют), а так как тор создан двумерной сеткой, действие сжатия начинает проявляться только в момент, когда к границе подходит середина бублика. Ессно деформация становится уже необратимой sad.gif Есть варианты, как сохранять углы?
                                                                а чо ето она утебя так дико тормозит?? ка сделать чтобы она не тормозила? и вобще помоему никого там не выворачивает
                                                                  Ну дык шаг-то 1Е-4, вычисления типом extended, один фрейм есть 100 циклов, да еще я его вообще никак еще не оптимизировал.
                                                                  А ты tor.dat ему в параметры подсовывал? У меня так после капитального сжатия вывернутый кусок тора проскочил насквозь еще нормальный smile.gif это было заметно по изменению цвета, после чего я ее вырубил.
                                                                    Цитата
                                                                    vesper1, 22.12.03, 18:33
                                                                    Ну дык шаг-то 1Е-4, вычисления типом extended, один фрейм есть 100 циклов

                                                                    ну, а в какой строчке ето записано??
                                                                    Цитата
                                                                    vesper1, 22.12.03, 18:33
                                                                    А ты tor.dat ему в параметры подсовывал? У меня так после капитального сжатия вывернутый кусок тора проскочил насквозь еще нормальный  это было заметно по изменению цвета, после чего я ее вырубил.

                                                                    подсовывал, но он у меня считался настолько медленно, что я его вырубил, не дождавшись действа
                                                                      Цитата
                                                                      wormball, 22.12.03, 20:05
                                                                      ну, а в какой строчке ето записано??

                                                                      Все есть в константах smile.gif или не все smile.gif Константа dt задает временной шаг, в основном цикле в строке for fr:=1 to 100 do begin меняешь 100 на что-нить еще, будет чаще перерисовываться.
                                                                      Кстати константы там все откомментированы.
                                                                      Цитата
                                                                      wormball, 22.12.03, 20:05
                                                                      подсовывал, но он у меня считался настолько медленно, что я его вырубил, не дождавшись действа

                                                                      Хе, а у тебя какой комп? У меня Р3-866, 6фпс считает sad.gif до оптимизации скорее всего дело не дойдет sad.gif
                                                                      Если хочешь, можешь включить давление, есть там такая строчка pressflag:=false; а строкой выше выражение для определения, а можно ли давление включать.
                                                                        да, чото их не по детски колбасит.....
                                                                        я думаю у тебя глюк в программе
                                                                          А не подскажешь где? wink.gif Я так глюка не нашел. Куб прыгает как надо, треугольник тоже smile.gif шарик тоже... Значит чего-то не хватает тору, чтоб он тоже прыгал sad.gif
                                                                            а если шаг в 10 раз увеличить, то их тоже колбасить начинает! мож параметры надо поменять?? ты кстати центр каждый раз рассчитываешь?

                                                                            зы.а мож ты у пружин всётаки полярность перепутал??
                                                                            Сообщение отредактировано: wormball -
                                                                              жёсткость 283, давление 150, для всех фигур, реакция опоры 6, шаг 0.001. всё вроде правильно.
                                                                              Сообщение отредактировано: wormball -
                                                                                Цитата
                                                                                wormball, 23.12.03, 17:42
                                                                                зы.а мож ты у пружин всётаки полярность перепутал??

                                                                                Неа smile.gif Я об этом думал. Ради проверки взял и поменял, тор на 10м фрейме (тогда еще шаг был 0.01, жесткость 13.6, давление 0.15, трение 0.03) он НЕМЕДЛЕННО разорвался laugh.gif laugh.gif
                                                                                Цитата
                                                                                wormball, 23.12.03, 17:42
                                                                                а если шаг в 10 раз увеличить, то их тоже колбасить начинает!
                                                                                Я так понял, если pe*dt>1, начинают сказываться машинные нули ohmy.gif ohmy.gif просто алгоритм берет 1е-19, и начинает на каждом шаге их множить, все и взрывается. Это недостаток численного интегрирования на компах sad.gif
                                                                                Цитата
                                                                                wormball, 23.12.03, 18:17
                                                                                жёсткость 283, давление 150, для всех фигур, реакция опоры 6, шаг 0.001. всё вроде правильно.

                                                                                Ага, ну и круто. А тор что, не выворачивается? Ща проверю.
                                                                                И правда, прыгает smile.gif
                                                                                Цитата
                                                                                wormball, 23.12.03, 17:42
                                                                                ты кстати центр каждый раз рассчитываешь?
                                                                                Хм. Спасибо, это же громадный гемор sad.gif Поправил, у меня прям летает smile.gif))))
                                                                                  Цитата
                                                                                  vesper1, 23.12.03, 19:53
                                                                                  если pe*dt>1, начинают сказываться машинные нули  просто алгоритм берет 1е-19, и начинает на каждом шаге их множить, все и взрывается

                                                                                  почему нули?? помоему как раз наоборот
                                                                                  Цитата
                                                                                  vesper1, 23.12.03, 19:53
                                                                                  Хм. Спасибо, это же громадный гемор  Поправил, у меня прям летает ))))

                                                                                  ыы? я ж совсем другое имел в виду! ежели ты его вычисляешь на первом шаге, то утебя ведь фигура едет, а центр стоит!! так что надо на каждом шаге его вычислять, а тормозит у тебя имхо главным образом графика.

                                                                                  и вобще, как ты пружинки задаёшь? только по сетке или каждая точка соединена с каждой другой??

                                                                                    Цитата
                                                                                    wormball, 23.12.03, 21:05
                                                                                    почему нули?? помоему как раз наоборот
                                                                                    Я имел в виду, при каждом шаге неизбежны ошибки в примерно 1е-19 в расстоянии между точками. Потом в applysprings етот 1е-19 множится на ре, а в updatevelocity на дт, в результате ошибка нарастает лавинообразно.
                                                                                    Цитата
                                                                                    wormball, 23.12.03, 21:05
                                                                                    ыы? я ж совсем другое имел в виду! ежели ты его вычисляешь на первом шаге, то утебя ведь фигура едет, а центр стоит!! так что надо на каждом шаге его вычислять
                                                                                    Я его вычислял вместо одного раза 504 sad.gif((((( вычисление стояло в цикле в applypressure. Я же говорил, оптимизации никакой sad.gif

                                                                                    Цитата
                                                                                    wormball, 23.12.03, 21:05
                                                                                    как ты пружинки задаёшь? только по сетке или каждая точка соединена с каждой другой?
                                                                                    По сетке, там есть массив masgran, он и хранит всю сетку. Я по нему прохожу до инитграфа, генерируя masspring достаточно тупым алгоритмом, а именно проверяю, есть ли уже пружина, связывающая эти вершины, и если нет, связываю.
                                                                                    Цитата
                                                                                    wormball, 23.12.03, 21:05
                                                                                    а тормозит у тебя имхо главным образом графика.
                                                                                    Это вполне возможно, я не подвергал ету прогу анализу по времени. Там в среднем 6 раз считаются нормали граней, правда они динамические, но мне влом делать еще один массив в куче.
                                                                                      Цитата
                                                                                      vesper1, 23.12.03, 20:16
                                                                                      Я имел в виду, при каждом шаге неизбежны ошибки в примерно 1е-19 в расстоянии между точками. Потом в applysprings етот 1е-19 множится на ре, а в updatevelocity на дт, в результате ошибка нарастает лавинообразно.

                                                                                      тоже мне неточность нашёл! там возникают неточности куда более чудовищного масштаба. а именно, когда ты подвигаешь точку на конечное приращение, ты говоришь, что её скорость постоянна на всём промежутке dt, хотя она в натуре меняется, и когда ты приращиваешь скорости, ты опять же говоришь что сила постоянна. поетому шаг интегрирования берут не более 1/10 периода самого быстрого колебания.

                                                                                      Добавлено в
                                                                                      Цитата
                                                                                      vesper1, 23.12.03, 20:16
                                                                                      Я его вычислял вместо одного раза 504 ((((( вычисление стояло в цикле в applypressure. Я же говорил, оптимизации никакой

                                                                                      кинь мне исправленную версию! самому лень разбираться
                                                                                        Цитата
                                                                                        wormball, 23.12.03, 21:53
                                                                                        а именно, когда ты подвигаешь точку на конечное приращение, ты говоришь, что её скорость постоянна на всём промежутке dt, хотя она в натуре меняется,

                                                                                        Здесь ты неправ, когда я двигаю точку, я считаю, что скорость в процессе меняется, по линейному закону, а вот с силой это действительно так, она считается неизменной на всем dt.
                                                                                        Цитата
                                                                                        wormball, 23.12.03, 21:53
                                                                                        кинь мне исправленную версию! самому лень разбираться

                                                                                        Ааа, не любишь копаться в чужом коде? Согласен, темный лес. Щас. (Я сейчас не дома, а править там почти нечего)
                                                                                        Хм. А здесь тор сначала сплющился, а потом все-таки прыгнул, восстановив форму.
                                                                                        Сообщение отредактировано: vesper1 -

                                                                                        Прикреплённый файлПрикреплённый файлJUMPBALL.PAS (11.32 Кбайт, скачиваний: 372)
                                                                                          Цитата
                                                                                          vesper1, 24.12.03, 09:01
                                                                                          Здесь ты неправ, когда я двигаю точку, я считаю, что скорость в процессе меняется, по линейному закону

                                                                                          не! когда ты считаешь что dx=v*dt, то v у тебя постоянно.
                                                                                          и вобще чото у тебя с пружинками. я давление увеличил, а кубик симметрию потерял.
                                                                                          да и вобще чото не такое уж большое увеличение скорости sad.gif
                                                                                            :) У меня dx=(2v+dv)*dt/2, а точнее dx=v*dt,dx:=(dx+(v+dv)*dt)/2;
                                                                                              а ты уверен что ето действительно ближе к реальности, чем dx=v*dt? я почемуто нет
                                                                                                По этому методу вычисленная равнодействующая действует на тело dt времени, масса там 1, следовательно ускорение есть F, тогда vnew=v+F (vnew это новое значение скорости) тогда dx=(vdt+vnew*dt)/2.
                                                                                                  помоему ето уже учитывается формулой
                                                                                                  d2x/dt2=F/m

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

                                                                                                    Добавлено в
                                                                                                    ЗЫ: А веселая полемика у нас с тобой возникла по поводу несчастной физики, а бьёмся мы имхо из-за разных исползованных понятий: ты говоришь всегда про мгновенное изменение, а я про dx/Dt. (в смысле дельта Т>0).
                                                                                                      правильно, но помоему ето как раз развёрнуто в первоначальной формуле
                                                                                                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                                                                      0 пользователей:


                                                                                                      Рейтинг@Mail.ru
                                                                                                      [ Script execution time: 0,0833 ]   [ 14 queries used ]   [ Generated: 6.07.25, 19:31 GMT ]