Шары

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 21 ноя 2009, 21:15

Понимаю, я сам работаю в этой среде. Вы при вычислениях учитываете радиусы
шаров? - без этого может в знаменатель влезть ноль, когда вычисляешь скалярное
произведение при нахождении проекций.
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

NewUser
Сообщений: 40
Зарегистрирован: 02 дек 2008, 21:00

Шары

Сообщение NewUser » 21 ноя 2009, 21:34

Так что то нашел, arccos от числа >1 пытаюсь вычислить.
Я поверку делаю,угол получившийся >90.если да то я вычитаю 180-угол,это зависит от того, как мы вектор направим проходящий через центры шаров.
Последний раз редактировалось NewUser 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 21 ноя 2009, 21:46

Мне кажется, лучше обходиться без обратных тригонометрических,
тем более, что их вычисление занимает много машинного времени.
Освежите начала аналитической геометрии.
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

NewUser
Сообщений: 40
Зарегистрирован: 02 дек 2008, 21:00

Шары

Сообщение NewUser » 21 ноя 2009, 21:48

копи паст зло,скопировать скопировал a индексы не поменял,мб по этому глючила
Нет, ошибка осталась
Последний раз редактировалось NewUser 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 22 ноя 2009, 09:02

grigoriy писал(а):Source of the post
Понимаю, я сам работаю в этой среде. Вы при вычислениях учитываете радиусы
шаров? - без этого может в знаменатель влезть ноль, когда вычисляешь скалярное
произведение при нахождении проекций.


Поправляю сам себя. При вычислении скалярного произведения деление на ноль не происходит,
оно может появиться потом, позже, когда вычисляешь косинус.
Вы можете не на Паскале, a алгебраическим языком описать процесс вычисления скоростей?
Ради простоты будем считать шары одинаковыми. R - радиус шара.

Дано: X1,Y1,X2,Y2,VX1,VY1,VX2,VY2 - перед столкновением.
Найти VX1',VY1',VX2',VY2' - после столкновения.
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 24 ноя 2009, 10:45

Если Вы еще не бросили программу, попробуйте вот это.
Заодно выловите мои ошибки :rolleyes:

{ процедура написана для одинаковых шаров радиуса r;

x1,y1,x2,y2 - координаты центров шаров в момент столкновения;

v1x,v1y,v2x,v2y - проекции скоростей перед столкновением,
после отработки процедуры - они же, но после столкновения;

nx,ny - проекции нормального вектора (длина 2r,соединяет центры шаров);
kx,ky - проекции касательного вектора (повернут на 90 градусов против
часовой относительно нормального);

v1n,v1k,v2n,v2k - проекции скоростей на касательный и нормальный
векторы;
cs,sn - косинус и синус угла поворота системы (n,k) относительно (x,y);
v - промежуточная переменная;
}

procedure Bams(r,x1,y1,x2,y2:real; var v1x,v1y,v2x,v2y:real);
var nx,ny,kx,ky,v1n,v1k,v2n,v2k,cs,sn,v:real;
begin
// вычисляем координаты нормального вектора
nx:=x2-x1;
ny:=y2-y1;
// вычисляем координаты касательного вектора
kx:=-ny;
ky:=nx;
// находим проекции скоростей на нормальный и касательный векторы
v1n:=(v1x*nx+v1y*ny)/2/r;
v2n:=(v2x*nx+v2y*ny)/2/r;
v1k:=(v1x*kx+v1y*ky)/2/r;
v2k:=(v2x*kx+v2y*ky)/2/r;
// обмениваем нормальные прекции, т.к. шары одинаковые
v:=v1n;
v1n:=v2n;
v2n:=v;
// определяем параметры поворота
cs:=nx/2/r;
sn:=ny/2/r;
// находим проекции скоростей после удара
v1x:=v1n*cs-v1k*sn;
v1y:=v1n*sn+v1k*cs;
v2x:=v2n*cs-v2k*sn;
v2y:=v2n*sn+v2k*cs;
end;
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

NewUser
Сообщений: 40
Зарегистрирован: 02 дек 2008, 21:00

Шары

Сообщение NewUser » 24 ноя 2009, 18:40

A как просчитывать заранее стокновения?
Последний раз редактировалось NewUser 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 24 ноя 2009, 18:47

NewUser писал(а):Source of the post
A как просчитывать заранее стокновения?


T.e. какие из пар "брать в разработку" при прохождении в цикле по массиву ?
Боюсь, наш диалог выходит за рамки физики. Может есть смысл обратиться
на форум программистов?
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 24 ноя 2009, 20:56

Для всех пар шаров известны относительные расстояния и скорости. Легко найти, какие из них в принципе движутся в направлении столкновения (не все, особенно в n>1-мерном пространстве), a для таких - время до возможного столкновения.
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 27 ноя 2009, 20:34

grigoriy писал(а):Source of the post
NewUser писал(а):Source of the post
A как просчитывать заранее стокновения?


T.e. какие из пар "брать в разработку" при прохождении в цикле по массиву ?
Боюсь, наш диалог выходит за рамки физики. Может есть смысл обратиться
на форум программистов?



fir-tree писал(а):Source of the post
Для всех пар шаров известны относительные расстояния и скорости. Легко найти, какие из них в принципе движутся в направлении столкновения (не все, особенно в n>1-мерном пространстве), a для таких - время до возможного столкновения.


Тема до сих пор висит в "горячих", хотя непонятно,
чем она горяча. Дополню еще, скорее всего холодным.

Я предлагаю Вам, NewUser, самый простой, примитивный, на мой взгляд,
алгоритм реализации "биллиардного стола".
Потом Вы его усовершенствуете, a начинать c чего-то надо.

Как будет себя вести толпа в темной комнате?
Очевидно, каждый будет передвигаться мелкими
шажками из боязни столкнуться.
Munin предлагает "включить свет" - предсказывать
заранее столкновения. Если бы он изложил поподробнее...

A пока вот, блуждание в темноте.

Имеются массивы (1..n) координат Xi, Yi и проекций скоростей
Vxi, Vyi. Перед началом выполнения программы эти величины
инициализированы.
Задан также малый интервал времени dt ("мелкий шажок").

Поехали...

B цикле i=(1..n) начинаем перемещать шары:
Xi:=Xi+Vx*dt
Yi:=Yi+Vy*dt

Затем в двойном цикле i=(1..n-1) j=(2..n) контролируем
расстояния между шарами s:=sqrt(sqr(Xi-Xj)+sqr(Yi-Yj)).
if s<=2*r then bams; {см. процедуру, которую я прислал ранее}B одиночном цикле проконтролируем также отражения от стенок.При столкновении co стенкой меняется на противоположнуюта проекция скорости, которая относится к оси, перпендикулярнойстенке. Другая не изменяется. Пусть левая стенка имеет координатуX1, правая - X2, верхняя - Y1, нижняя - Y2.Чтоб не было недоразумений, напомню, что в Delphi на канвеначало координат находится в левом верхнем углу,ось Х направлена вправо, У - вниз.if ((Xi-X1) < 2*r) or (X2-Xi) < 2*r)) then Vxi:=-Vxi;if ((Yi-Y1) < 2*r) or (Y2-Yi) < 2*r)) then Vyi:=-Vyi;Вроде как приехали, по большому счету...Очередную прорисовку надо сначала выводить на виртуальныйэкран, a потом на физический, чтоб не было мерцания.Ho, возможно, это уже яйца курицу учат...
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test


Вернуться в «Физика»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 33 гостей