Форум программистов, компьютерный форум CyberForum.ru

реализация трения в физической симуляции - C++

Восстановить пароль Регистрация
 
victorian
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 14
20.12.2012, 18:45     реализация трения в физической симуляции #1
В общем есть у меня физ демка, в которой выпуклые тела сталкиваются, но трения нету, поэтому даже стенка из блоков просто разваливается со временем сама, блоки начинают разъезжаться.

Собсно релизовано все это по методу интегрирования Верле, где скорость у нас равна V = Pos - OldPos

Скорость в принципе можно заменить на -k*N+OldVelocity;

где N как я понял нормализованный вектор скорости (ну еще на -1 умноженный не?)
ну и еще добавить хак типа VelNew = max(-k*N+OldVelocity, 0.0f) - что бы тело внезапно не начало двигаться в другую сторону если трение = "бесконечности"

Но как это добавить в уже существующий код я не знаю, пробовал разные вариации, вот исходный метод:


C++
1
2
3
4
5
6
7
8
9
10
void Physics::UpdateVerlet() { //Обновляем положение вершин
    for( int I = 0; I < VertexCount; I++ ) {
        Vertex& V = *Vertices[ I ];
 
        Vec2 OldPosition = V.Position;
        V.Position += V.Position-V.OldPosition + V.Acceleration*Timestep*Timestep;
        V.OldPosition = OldPosition;
 
    }
}

А вот то, что я пытался сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Physics::UpdateVerlet() { //Обновляем положение вершин
    for( int I = 0; I < VertexCount; I++ ) {
        Vertex& V = *Vertices[ I ];
 
        Vec2 VelOld = V.Position-V.OldPosition;
        V.Position += V.Position-V.OldPosition + V.Acceleration*Timestep*Timestep;
        
        Vec2 VelOld2 = VelOld;
        VelOld2.Normalize();
        VelOld2=VelOld2*(-1);
 
        if (VelOld*CollisionInfo.Normal<0.0f)
            V.OldPosition=V.Position-VelOld*(VelOld2*(-0.001)+VelOld>0);
        else
            V.OldPosition=V.Position-VelOld;
    }
}
но получилось не очень, как мне доработать метод, что бы появилось трение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 18:45     реализация трения в физической симуляции
Посмотрите здесь:

C++ Моделирование физической задачи на Си/Си++
C++ Реализация
Вычислить коэффициент трения C++
C++ Определить силу трения
C++ Реализация меню
C++ Приложение для симуляции перехвата ракет
C++ Разбивка физической формулы на компоненты
C++ Решение физической задачи: рассчитать полет камня, брошенного под углом к горизонту

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 07:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru