Главная страница
    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.45 MB
Время: 0.01 c
8-1111057728
Анонимщик1
2005-03-17 14:08
2005.07.25
Граф фильтров для RealMedia


1-1120823762
Ольга
2005-07-08 15:56
2005.07.25
Количество Childs у выбранного TreeView.Node


3-1117915317
lockheed_man
2005-06-05 00:01
2005.07.25
Делфи и PostgreSQL


14-1120141560
Juice
2005-06-30 18:26
2005.07.25
OLE, обработка событий на C++


11-1103872505
Princ
2004-12-24 10:15
2005.07.25
Маленькая DLL с ListView глючит





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский