Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 08:53   #31
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Не жать, но...
1)Чтоб что-то понять в нем нужно прочитать и понять кучу информации по векторам, физике и прочему..
2)Исходник был на моем старом движке.
3)Исходник БЫЛ , но где он сейчас не знаю. Наверно удалил из-за ненадобности или скинул куда....
Вадим Буренков вне форума Ответить с цитированием
Старый 20.08.2009, 09:18   #32
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Вадим Буренков
Держи книжку
http://www.kodges.ru/13419-fizika-dl...rnykh-igr.html

хоть она и не для Delphi но всеже!
VintProg вне форума Ответить с цитированием
Старый 02.11.2010, 22:00   #33
Dock1100
Новичок
Джуниор
 
Регистрация: 09.01.2010
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
Вообще физику круг-круг, круг-линия реализовать достаточно просто, но не более...
Пишу небольшую 2д игру, но никак не могу реализовать физику столкновения круга с линией(получается очень криво). можете помочь?
Код:
type TDcVector=record
x,y:real;
end;
type
TCircle=record
aceleration:TDcVector; //ускорение круга
position:TDcVector; //позиция
Radius:Integer; //радиус
angle    : Single;//угл
w        : Single;

end;
var
  p1,p2:Tpoint;
  circle:Tcircle;//круг
  gravitation:TDcVector;
  dt:real;
  v  : TDcVector;
  dist : real;
  r_sum : real;
  k : real;
  f0,f1,A,B,C,op: real;
  tmp:Tpoint;
  ind:boolean;
  sub_angle:extended;
  s1,s2:Tpoint;

begin
  s1:=p1;
  s2:=p2;
  dt:=0.1; //прошедшее время
  circle.aceleration := VectorAdd(circle.aceleration, VectorMul(gravitation,dt));
  circle.angle := circle.angle + circle.w*dt;
  circle.position := VectorAdd(circle.position, VectorMul( circle.aceleration, dt ));

//столкнулось или нет
  op:=circle.Radius*circle.Radius;
  tmp:=VSub(S1,point(round(Circle.position.x),round(Circle.position.y)));
  f0 := dot3(tmp,tmp)-op;

  tmp:=VSub(S2,point(round(Circle.position.x),round(Circle.position.y)));
  f1 := dot3(tmp,tmp)-op;
  ind := f0*f1<0;
  if (not ind) then
    begin
      tmp:=VSub(S1,S2);
      A := dot3(tmp,tmp);
      B := (S1.X-Circle.position.X)*(S2.X-S1.X)+
           (S1.Y-Circle.position.Y)*(S2.Y-S1.Y);
      ind := (B*B>=A*f0) and (B<0) and (A+B>0);
      if ind then
//если да то
      begin
      A:=s2.y-s1.y;
      B:=-(s2.x-s1.x);
      C:=-s1.x*(s2.y-s1.y)+s1.y*(s2.x-s1.x);
      dist:=abs(A*Circle.position.x+B*Circle.position.y+C)/sqrt(A*A+B*B);//получаю длину перепендикуляра опущеного из центра круга на прямую
      dist:=dist-circle.radius;
      if dist<0 then
      begin
       sub_angle:=arctan((s2.y-s1.y)/(s2.x-s1.x));//угол прямой
       Circle.position.x := Circle.position.x-sin(sub_angle)*dist;//смещение центра круга
       Circle.position.y := Circle.position.y+cos(sub_angle)*dist;
      end;
      end;
     end;
прикрепил исходный код(кнопка point1 и point2 для того что бы поставить точки линии,circle-круг, start/stop- начать,остановить)
http://file.qip.ru/file/VxElh94p/game.html

Последний раз редактировалось Dock1100; 02.11.2010 в 23:03.
Dock1100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна ли высшая математика и физика? фЁдОр Свободное общение 35 08.06.2012 06:39
Физика программы. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 09.05.2008 18:14
Анимация в играх frai Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.11.2007 14:28