Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-1120555327
Ded Moroz
2005-07-05 13:22
2005.07.25
WinXP Manifest


1-1120549448
Бу
2005-07-05 11:44
2005.07.25
проблема С Drawgrid


14-1120125354
КаПиБаРа
2005-06-30 13:55
2005.07.25
Министерство обороны России планирует значительно сократить число


14-1120202019
Hawk2
2005-07-01 11:13
2005.07.25
Помогите определить поломку!


14-1119841484
Skier
2005-06-27 07:04
2005.07.25
В Крым на машине...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский