MrKerbMan, Закон сохранения импульса гласит: Если векторная сумма внешних сил, действующих на систему, равна нулю, то импульс системы сохраняется, то есть не меняется со временем. Векторная сумма внешних сил равна нулю, если отключить гравитацию курсора, импульс системы изначально равен нулю, значит и в конце равен нулю, а значит то единственное тело, которое осталось не двигается
V=((m1*v1) (m2*v2))/(m1 m2) Где V проекция скорости итогового тела, m1 масса первого тела до слипания, m2 масса второго тела до слипания, v1,v2 - скорости соответсвенною Вот правильное уравнение
Сообщение отредактировал ux3sty 20 апреля 2014 - 22:58
Ты бы лучше сказал, как надо. Это во первых. Во вторых, поскольку компьютер не может выполнять действия одновременно, значит, он выполняет их по очереди. А ОТ ЭТОГО ТОЧНОСТЬ СИЛЬНО УХУДШАЕТСЯ!
А, ну ладн, попробуем.
Неа, по твоей вообще куда-то со скоростью света улетает. Veloсity.x = (Mass b2->Mass) / ((Mass*Veloсity.x) (b2->Mass*b2->Veloсity.x)); Veloсity.y = (Mass b2->Mass) / ((Mass*Veloсity.y) (b2->Mass*b2->Veloсity.y));
MrKerbMan, Да здесь ты прав, но настолько точность не думаю, что изменится. Mass = Mass b2->Mass; b2->Velosity.x = b2->Velosity.x *(b2->Mass / Mass); b2->Velosity.y = b2->Velosity.y *(b2->Mass / Mass); R = sqrt(Mass);// b2->R / 3; Velosity = (Velosity*(b2->Mass / Mass) b2->Velosity); попробуй заменить на вот такое.
MrKerbMan, Я там перепутал, не так: (m1 m2)/((m1*v1) (m2*v2)) а так: ((m1*v1) (m2*v2))/(m1 m2)
MrKerbMan, А сколько тел максимально может быть на экране? Только 3?
Нет, 10, но я сейчас работаю с массивом указателей, в следующих версиях можно будет добавлять объекты во время работы, будет поддерживаться неограниченное количество объектов. Кстати, ссылку обновил. Благодарю ux3sty за многочисленные исправления физики движка ЛОЛ, благодарность выписал.
Ну, что думаешь? Всё равно не сильно импульс гасится?
MrKerbMan, Что-то все-равно не очень. Ты вставил написал свой или вставил этот: Mass = Mass b2->Mass; b2->Velosity.x = b2->Velosity.x *(b2->Mass / Mass); b2->Velosity.y = b2->Velosity.y *(b2->Mass / Mass); R = sqrt(Mass);// b2->R / 3; Velosity = (Velosity*(b2->Mass / Mass) b2->Velosity);
MrKerbMan, ой, так Mass = Mass b2->Mass; должно в самом начале стоять вроде как Ой нет вообще не так. Вроде вот так: b2->Velocity.x = b2->Velocity.x *(b2->Mass / Mass b2->Mass); b2->Velocity.y = b2->Velocity.y *(b2->Mass / Mass b2->Mass); Velocity = (Velocity*(b2->Mass / Mass b2->Mass) b2->Velocity); Mass = Mass b2->Mass;
но это по сути тоже самое что и: Velocity.x = ((Mass * Velocity.x) (b2->Mass*b2->Velocity.x)) / (Mass b2->Mass); Velocity.y = ((Mass * Velocity.y) (b2->Mass*b2->Velocity.y)) / (Mass b2->Mass); Mass = Mass b2->Mass;
Сообщение отредактировал ux3sty 21 апреля 2014 - 00:04
Путём нудной отладки я обнаружил, что даже при одинаковой массе в момент столкновения правое и левое тела имеют разные скорости. И виной этому неодновременный обсчёт.