Здравствуйте, Аноним, Вы писали:
А>Допустим есть большое бильярдное поле, на нем шары. Потери при соударениях небольшие, поэтому пущеный шар вполне может расшевелить все остальные.
А>Задача алгоритма — расчитывать положения шаров во времени, оптимально по времени и памяти. Или, (если это поможет) только соударения с границами поля.
А>В голову приходит только самый очевидный и очень медленный способ просчета. А может есть и другие?
А>PS. Кручения можно не учитывать.
тебе надо функции x(t), y(t), x,y — координата шара, t — время ?
если да — то опередляешь границы поля, например, x E (0, w); y E (0, h); E — принадлежит, w,h — ширина, высота поля.
возмем один шар
придаем ему импульс — дальше он сам катится...
x(t), y(t) — будут циклическими функциями, наподобие синуса, но не плавно ( c переменным ускорением ), а с постоянным.
то есть, например, при скорости (поx, поy) = (3,5), и (w,h) = (10, 10) :
t 0 1 2 3 4
x 0 3 6 9 2*w-(9+3)=8
y 0 7 2*h-14=6 -1*(6-7)=1 1+7=8
короче, скорость и размеры поля (w,h) — определяют период колебания функций x(t), y(t).
заметь, что они независыми. я не ошибся, написав две функции, несмежные друг с другом.
НО:
если рассматривать бильярдный шар не как точку, а как круг, надо учитывать, что у него могут быть две точки касания со стенкой поля.
p.s.
только идея, но вдруг поможет...