![]() |
Проверка столкновения отрезков на числовой прямой зависящее от времени.
Здравствуйте, есть два отрезка на числовой прямой, движущихся по этой прямой с различной скоростью. Нужно написать функцию, которая вернула бы время когда эти отрезки столкнулись бы(если они вообще когда нибудь столкнутся). Для удобства я представил отрезки окружностями и вычислял время столкновения вот по этой формуле:
Код AS1/AS2:
Нужно найти такое значение t когда расстояние между окружностями будет равно сумме их радиусов. "На бумаге" все работает как надо, но на практике... Первая проблема с которой столкнулся, это если скорость какого либо отрезка равна нулю, то уравнение не решается. Если на момент проверки отрезки уже пересекаются, то уравнение так же не имеет решений. прошу помочь найти универсальный способ проверки. |
Что бы решалось замените = на <=
Добавлено через 16 минут t >= s2-s1+r1+r2 / (v1 - v2) Решения не будет если v1 = v2 (скорости одинаковы и однонаправлены), либо если отрезки движутся в разные стороны. |
alatar
Не совсем понял, что в данном случае есть t? Мне казалось что формула упрощается до квадратного уравнения корни которого являются временем начала и конца столкновения. И не будет ли ответ разным если поменять окружности местами? Т.е. есть ли разница между этим t >= s2-s1+r1+r2 / (v1 - v2) и этим t >= s1-s2+r2+r1 / (v2 - v1) выражением? |
t — время.
Это не квадратное уравнение. Добавлено через 3 минуты 1. У вас не равенство. 2. Зачем вы возвели обе части уравнения в квадрат? 3. Из пункта А в пункт Б едет Добавлено через 18 минут Цитата:
Вот ваша формула: Код:
( (s1+ v1*t)-(s2 + v2*t) )^2 = (r1+r1)^2Код:
ABS((s1+ v1*t)-(s2 + v2*t)) <= r1+r2Пардон, первый раз неправильно вывел Код:
(r1+ r2 - ABS(s1 - s2)) / ABS(v1 - v2) <= ABS(t) |
alatar
Ну вот если подставить в мою формулу значения: s1=21, v1= -10, r1=1 и s2=5, v2= 10, r2=2, то полученные корни уравнения будут t1 = 0.65, t2 = 0.95, что логически верно. Едущие друг другу на встречу поезда столкнутся локомотивами в 0.65 ед. времени, а их последние вагоны разъедутся в 0.95 ед. времени. Если использовать вашу формулу заменить, <= на = и менять местами s1 и s2 то можно получить те же ответы, что и у меня, но только гораздо проще, спасибо! Цитата:
|
А теперь подставьте эти "корни" в свое уравнение.
|
Цитата:
|
Код:
( (s1+ v1*t)-(s2 + v2*t) )^2 = (r1+r2)^2Код:
( (22+ (-10)*0.95)-(5 + 10*0.95) )^2 = (1+2)^2 |
alatar
Моя ошибка, s1=21, в этом случае все правильно. Ваша формула: Код:
(r1+ r2 - ABS(s1 - s2)) / ABS(v1 - v2) <= ABS(t) |
Для данных значений:
Конец столкновения Цитата:
Цитата:
Добавлено через 2 минуты Если имеется решение, конечно. |
| Часовой пояс GMT +4, время: 03:46. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.