Re: Два шарика

From
Konstantin Mikheev ()
To
All ()
Date
2000-02-26T13:28:57Z
Area
RU.ALGORITHMS
From: "Konstantin Mikheev" <fowrell@price.surgut.ru>


Andrei Reilian <Andrei.Reilian@p50.f125.n469.z2.fidonet.org> wrote in
message news:951554396@p50.f125.n469.z2.ftn...
>  IB> Совершенно элементарно написать алгоритм посредством которого шарик
(а
>  IB> точнее окружность) будет двигаться по экрану, отражаясь от краев. Но
>  IB> как сделать, чтобы 2 шарика бегали по экрану, отражаясь не только от
>  IB> краев, но еще и друг от друга????

> Так же элементарно. Каждый шарик "знает" свои  массу и скорость. Перед тем
как
> в очередной раз передвинуть шарик проверяешь, не столкнется ли он со
стенкой
> (эта формула у тебя есть как я понял), или с другим шариком. Расстояние
между
> центрами шаров определяешь как
> sqrt((x2-x1)^2+(y2-y1)^2). Когда оно становится меньше 2r( r= радиус
шара),
> вычисляешь новые скорости для обоих шаров после удара (элемент. физика) и
> двигаешь их дальше.
> Andrei


Смотря как часто проверять столкновение шариков. Если проверять
слишком медленно, то пересчения могут быть выявлены, только когда
шарики уже давно пересекаются, и занимают одно и то же
пространство. А то и вообще пролетят друг в друге.

Есть способ сложнее, но если тебе нужно что-то круче отмазки
от препода, это вариант.

По строгости, (и так сделано в некоторых игровых движках), нужно
искать пересечения между тиками движения - смотреть, не
пересекаются ли прямоугольники, образованные их движением,
и сами шарики в конечном положении.

Затем, если шарики пересекаются, ищется их положение в момент
столкновения, затем вычисляются вектора их взаимных толчков
(скорость + направление) и импульсы. После воздействия друг на
друга импульсами, шарики вычисляют свои новые траектории, и так
далее.

Вот случаи, когда шарик "зажат" между стенкой и другим шариком,
придется обрабатывать специально. В первом Квэйке, например,
зажатый объект просто уничтожается - я как-то таким образом
заработал фраг. ;-)) <Я прижал игрока к движущейся на него
панели, и рраз - полетели куски!>

Всего Вам.



--- ifmail v.2.15dev4
 * Origin: ProNet (2:5020/400)