IPB
ЛогинПароль:

> Реализация соударения шаров.., Дайте формулы, пожалуйста..
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Филиппс

Репутация: -  0  +


Задача такова, чтобы реализовать нецентральное соударение двух шаров (на плоскости) разных масс и скоростей и рисовать все это на канве (в Дельфи). Я так понимаю, что нужно делать в таймере: вычислять новые координаты, перебирать каждый шар (это если их много), не соприкасается ли он с другим. Когда это произошло, нужно перещитывать скорости и направления шаров. Вот это как раз таки и интересует. По каким формулам можно посчитать углы и скорости?? Перепробывал кучу формул, найденных в книгах и интернете. Не работает даже центральный удар. Может что-нибудь неправильно в самой идее реализации..

Заранее благодарен.

Сообщение отредактировано: philip-s -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Цитата(philip-s @ 14.08.2007 22:02) *

Вот код обработчика события таймера. Там почти все закомментировано, т.к содержит несколько вариантов обсчета скоростей. Однако все неправильно считают. Я начал подозревать, что дело не в формулах, а в самой идее реализации.
Подскажите что-нить.. wacko.gif

Подозреваю, что ты прав.
Мне кажется, что формула при каждом пересчете дает дискретное значение,
а это задача реального времени. Значение координаты шара постоянно меняется,
и программа постоянно должна его мониторить.Когда я как ты, пытался считать по формулам,
программа у меня вылетала-не знала, какое зачение подставлять-предыдущее или последующее.
Тут надо понимать логику действий.
Попробуй вот такой код. Он "типа корявый", но логика соударений в нем реализована.

program Sharik2;
uses graph,crt;
var Gd, Gm, X, Y, R, n: Integer; Napr: string;
X1,Y1,R1,n1, Napr1: Integer;
begin
Gd := Detect; InitGraph(Gd, Gm, ' ');
X:=120; Y:=240; R:=20; Napr:='NP'; n:=1;
X1:=220; Y1:=230; R1:=15; Napr1:=6; n1:=1;
repeat
setcolor(15);
Line(20, 40,20, 440); Line(20,40,620,40);
Line(620,40,620,440); Line(620,440,20,440);
Circle(X,Y,R); Circle(X1,Y1,R1); {Line(X,Y,X1,Y1);--эта линия не обязательна}
delay(400);
setcolor(0);
Circle(X,Y,R); Circle(X1,Y1,R1); Line(X,Y,X1,Y1);
if Napr='VP' then begin
X:=X+n; Y:=Y-n;
end;
if Napr='NP' then begin
X:=X+n; Y:=Y+n;
end;
if Napr='NL' then begin
X:=X-n; Y:=Y+n;
end;
if Napr='VL' then begin
X:=X-n; Y:=Y-n;
end;
if Y=40 then begin
if Napr='VP' then Napr:='NP';
if Napr='VL' then Napr:='NL';
end;
if X=620 then begin
if Napr='VP' then Napr:='VL';
if Napr='NP' then Napr:='NL';
end;
if Y=440 then begin
if Napr='NP' then Napr:='VP';
if Napr='NL' then Napr:='VL';
end;
if X=20 then begin
if Napr='VL' then Napr:='VP';
if Napr='NL' then Napr:='NP';
end;
if Napr1=2 then begin
X1:=X1+n1; Y1:=Y1-n1;
end;
if Napr1=4 then begin
X1:=X1+n1; Y1:=Y1+n1;
end;
if Napr1=6 then begin
X1:=X1-n1; Y1:=Y1+n1;
end;
if Napr1=8 then begin
X1:=X1-n1; Y1:=Y1-n1;
end;
if Y1=40 then begin
if Napr1=2 then Napr1:=4;
if Napr1=8 then Napr1:=6;
end;
if X1=620 then begin
if Napr1=2 then Napr1:=8;
if Napr1=4 then Napr1:=6;
end;
if Y1=440 then begin
if Napr1=4 then Napr1:=2;
if Napr1=6 then Napr1:=8;
end;
if X1=20 then begin
if Napr1=8 then Napr1:=2;
if Napr1=6 then Napr1:=4;
end;
if (abs(X-X1)<(R1+R)/2) and (abs(Y-Y1)<(R1+R)/2) then
begin
if Napr='VP' then Napr:='NL';
if Napr='VL' then Napr:='NP';
if Napr='NP' then Napr:='VL';
if Napr='NL' then Napr:='VP';
if Napr1=2 then Napr1:=6;
if Napr1=4 then Napr1:=8;
if Napr1=6 then Napr1:=2;
if Napr1=8 then Napr1:=4;
end;
until keypressed;
CloseGraph
end.



--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 19:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name