Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

Моделирование поворота   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
14-1119960982
REA
2005-06-28 16:16
2005.07.25
Работа на свободе


14-1119856274
Holy
2005-06-27 11:11
2005.07.25
Athlon 64


3-1118498889
Koala
2005-06-11 18:08
2005.07.25
Помогите с запросом... FB 1.5


14-1120307477
lookin
2005-07-02 16:31
2005.07.25
Попробовать NHL2005 по интернет...


4-1117535567
MrAndrey_ka
2005-05-31 14:32
2005.07.25
Передача сообщения