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)