Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизФизика твердого тела и борьба с дискретностью Найти похожие ветки
← →
Strech (2005-04-01 08:32) [0]Помогите решить простую задачу: Тело по инерции движется по горизонтальной поверхности с некоторой скоростью, сила трения придает телу отрицательное ускорение. Со школы помню V = V0 - a * dt. dt - время смены кадра (для 100 Гц монитора dt=0.01 сек). Так вот, если сила трения достаточно большая, то в момент остановки V0 < а * dt и при таких дискретных расчетах тело приобретает отрицательную скорость. Как с этим бороться?
← →
Думкин © (2005-04-01 08:51) [1]1. Ориентироваться на монитро - моветон.
2. выставить эпсилон - меньше его - ставить принудительно в 0 и ускорение тоже в 0.
← →
Strech (2005-04-01 08:55) [2]>Думкин ©
1. про монитор я для примера написал, просто просчет очередного кадра синхронизирован с его отображением.
2. При изменении dt мы не получим реалистичность. В каких случаях все в 0 устанавливать?
← →
megabyte-ceercop © (2005-04-01 09:06) [3]Я физику в школе не учил (это правда, у нас, в нашей сельской школе такого предмета небыло :) пра-вда. ). Тут мне кажется, что воздействие силы трения зависит не только от свойств поверхностей, но и от скорости самого объекта.
Сам же говорил:
> придает телу отрицательное ускорение
А ведь не просто отрицательное, а отрицательное по отношению к скорости объекта.
Выходит что
V = V0 + ( a * dt * (-V0) ) .
Хотя если представить себе поведение объекта с такой формулой, то она подходит скорее к движению в среде :\
А формула
← →
Strech (2005-04-01 09:08) [4]>Думкин ©
каким образом епсилон подобрать? Предположим если скорость меньше Eps, то тело останавливается, а если в той же задаче тело на очень скользкую поверхность попадает, то при скорости меньше Eps, тело остановится, но в реальности оно еще долго двигаться будет
← →
Strech (2005-04-01 09:09) [5]>megabyte-ceercop ©
в учебнике физики написано, что трение не зависит от скорости
← →
megabyte-ceercop © (2005-04-01 09:24) [6]... продолжаем :) не ту кнопку надавил. :)
Так вот...
А формула
> V = V0 - a * dt
Это скорее воздействие на объект непрерывной, внешней, равномерно распределенной во времени и простанстве силы (формулировок я не знаю) один из примеров - гравитация.
dt - в формуле обязателен (не забываем что это не физика, а Game-физика) Думкина не слушай про монитор. :) Хотя я Димкина уважаю :) Даже видел его живим и говорящим :)
Я конечно согласен что на монитор как таковой ориентироваться нельзя, но вот учитывать время между итерациями необходимо (да, для вычисления этого самого времени, просто знать частоту развертки недостаточно, однако в данном случае допустим :).
← →
megabyte-ceercop © (2005-04-01 09:29) [7]
> в учебнике физики написано, что трение не зависит от скорости
Я так и думал :\
Strech тебе формула нужна или код (если код, то delphi или C )?
← →
Strech (2005-04-01 09:31) [8]>megabyte-ceercop ©
ну а дискретность то как победить?
← →
Strech (2005-04-01 09:32) [9]код не важно на чем,
мне бы сам подход понять
← →
megabyte-ceercop © (2005-04-01 09:44) [10]Дискретность тут не причем :) Далай так:
C++:if (V0 >0) //определяем направление движения объекта
{
if ((V0 - (a*dt)) <= 0) //если вектор скорости меньше, чем вектор воздействия трения или равен ему,
V = 0; //то останавливаем объект
else
V = ((V0 - (a*dt)); //иначе высчитывам воздействие трения
}
else
{
if ((V0 + (a*dt)) >= 0) //тоже самое, но для противоположной скорости объекта
V = 0;
else
V = ((V0 + (a*dt));
}
Если я правильно понял что подразумевается под словом эпсилон :)
то тут в качастве эпсилона взята величина этой самой силы трения (а это правильно :) )
← →
megabyte-ceercop © (2005-04-01 09:49) [11]И на счет борьбы с дискретностью.
Если тебе нужна картинка, на которой будет движение этого объекта демонстрироваться, то дискретность тут нейзбежна.
А если тебе просто нужно, зная вводные параметры, вычислить конечный результат по истечении какого-то времени, то подставь это время в качестве dt, и прогони одну итерацию по этому коду.
← →
Strech (2005-04-01 10:04) [12]Такой подход я уже реализовал, но движение у меня не только прямолинейное, и сил побольше... короче, что-то не срослось :(
← →
Думкин © (2005-04-01 10:05) [13]> [4] Strech (01.04.05 09:08)
Ну например 2*a*dt
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.043 c