Форум: "Игры";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
ВнизМоделирование поворота Найти похожие ветки
← →
Goorus © (2005-04-11 14:06) [0]Помогите, кто физику помнит. Требуется "смоделировать горизонтальный поворот автомобиля". Поворот на 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-11 20:56) [1]ой ... что-то маловато написано кода для "реальной" физики движения автомобиля на повороте.
Дуй сюда http://www.gamedev.ru/articles/?id=70108 там все есть.
На будущее: юзай ODEЮ, проблем меньше - результата больше.
← →
Goorus © (2005-04-12 03:37) [2]ODE для такого проекта? Это будет слишком :) Мне не нужна вся физика, только поворот. И машина в 2Д, вид сверху. Не надо никаких замутов спереключением передачи и перемещением центра тяжести, нужно смоделировать идеальный вариант по классическим законам физики. На геймдеве статью уже смотрел, там рассматривается слишком реальная модель, с отдельным вычислением сил для задних и передних колёс и много такого, чего реализовывать не хотелось бы :) Нет ли варианта попроще?
← →
4ECHOK © (2005-04-12 10:12) [3]Как мне помнится, там еще и исходник небольшой 2d-демки был (на СИ по-моему). Думаю это то, что тебе нужно. Лично меня эта статья и исходник очень выручили в одно время.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c