![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Моделирование поворота
Goorus © (2005-04-11 14:06:00)Помогите, кто физику помнит. Требуется "смоделировать горизонтальный поворот автомобиля". Поворот на 90 градусов, входные данные - малый и большой радиусы поворота, мощность движка, начальная скорость, коэфициент трения.. всё что угодно :) Проблему вызывает именно сам поворот, т.к. надо учитывать, что машину заносит.
Вот что у меня пока получилось (работает неправдоподобно):
TCar = record
X, Y: Real;
Angle: Real;
SpeedX, SpeedY: Real;
Width, Height: Real;
Mass: Real; // масса
MaxAccel: Real; // максимальное ускорение
end;
TRoad = record
r1, r2: Real;
trenK, trenS: Real; // Трение качения, трение скольжения
end;
...
// в цикле
// угол поворота
Car.Angle := ArcTan2(-Car.Y, -Car.X) - pi/2;
// необходимое ускорение
At := sqrt( sqr(Car.X) + sqr(Car.Y) );
if At > Car.MaxAccel then At := Car.MaxAccel;
// расчитываем имеющееся ускорение
Ax := At * cos(Car.Angle + pi/2);
Ay := At * sin(Car.Angle + pi/2);
// добавляем силу трения
AtrX := g * (Road.trenK);
AtrY := g * (Road.trenK * cos(Car.Angle + pi/2) + Road.trenS * sin(Car.Angle + pi/2));
{
AtrX := g * (Road.trenK * sin(Car.Angle) + Road.trenS * cos(Car.Angle));
AtrY := g * (Road.trenK * cos(Car.Angle) + Road.trenS * sin(Car.Angle));
}
if Abs(AtrX) > Abs(Ax) then
dsx := -Car.SpeedX
else
begin
Ax := Ax - Sign(Ax) * AtrX;
dsx := tDelta * Ax;
end;
if Abs(AtrY) > Abs(Ay) then
dsy := -Car.SpeedY
else
begin
Ay := Ay - Sign(Ay) * AtrY;
dsy := tDelta * Ay;
end;
Car.SpeedX := Car.SpeedX + dsx;
Car.SpeedY := Car.SpeedY + dsy;
Car.X := Car.X + tDelta * Car.SpeedX;
Car.Y := Car.Y + tDelta * Car.SpeedY;
Car.MaxAccel - максимальное ускорение, которое может иметь машина за счёт движка. Считается так: мощность/(Массу * Ускорение_Свободного_Падения).
Считать, что центр поворота находится в точке (0,0).
4ECHOK (2005-04-12 10:12:00) [1]Как мне помнится, там еще и исходник небольшой 2d-демки был (на СИ по-моему). Думаю это то, что тебе нужно. Лично меня эта статья и исходник очень выручили в одно время.
Goorus (2005-04-12 03:37:00) [2]ODE для такого проекта? Это будет слишком :) Мне не нужна вся физика, только поворот. И машина в 2Д, вид сверху. Не надо никаких замутов спереключением передачи и перемещением центра тяжести, нужно смоделировать идеальный вариант по классическим законам физики. На геймдеве статью уже смотрел, там рассматривается слишком реальная модель, с отдельным вычислением сил для задних и передних колёс и много такого, чего реализовывать не хотелось бы :) Нет ли варианта попроще?
4ECHOK (2005-04-11 20:56:00) [3]ой ... что-то маловато написано кода для "реальной" физики движения автомобиля на повороте.
Дуй сюда http://www.gamedev.ru/articles/?id=70108там все есть.
На будущее: юзай ODEЮ, проблем меньше - результата больше.