Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проверка столкновения отрезков на числовой прямой зависящее от времени. (http://www.flasher.ru/forum/showthread.php?t=182651)

PlutDem 30.07.2012 14:44

Проверка столкновения отрезков на числовой прямой зависящее от времени.
 
Здравствуйте, есть два отрезка на числовой прямой, движущихся по этой прямой с различной скоростью. Нужно написать функцию, которая вернула бы время когда эти отрезки столкнулись бы(если они вообще когда нибудь столкнутся). Для удобства я представил отрезки окружностями и вычислял время столкновения вот по этой формуле:
Код AS1/AS2:

( (s1+ v1*t)-(s2 + v2*t) )^2 = (r1+r1)^2

Где: s - текущие координаты окружности, v - скорость движения окружности, t - время, r - радиус.
Нужно найти такое значение t когда расстояние между окружностями будет равно сумме их радиусов. "На бумаге" все работает как надо, но на практике... Первая проблема с которой столкнулся, это если скорость какого либо отрезка равна нулю, то уравнение не решается. Если на момент проверки отрезки уже пересекаются, то уравнение так же не имеет решений.
прошу помочь найти универсальный способ проверки.

alatar 30.07.2012 15:41

Что бы решалось замените = на <=

Добавлено через 16 минут
t >= s2-s1+r1+r2 / (v1 - v2)
Решения не будет если v1 = v2 (скорости одинаковы и однонаправлены), либо если отрезки движутся в разные стороны.

PlutDem 30.07.2012 16:20

alatar
Не совсем понял, что в данном случае есть t?
Мне казалось что формула упрощается до квадратного уравнения корни которого являются временем начала и конца столкновения.
И не будет ли ответ разным если поменять окружности местами? Т.е. есть ли разница между этим
t >= s2-s1+r1+r2 / (v1 - v2)
и этим
t >= s1-s2+r2+r1 / (v2 - v1)
выражением?

alatar 30.07.2012 16:29

t — время.
Это не квадратное уравнение.

Добавлено через 3 минуты
1. У вас не равенство.
2. Зачем вы возвели обе части уравнения в квадрат?
3. Из пункта А в пункт Б едет ржавый механизм и кровоточит вышел поезд... (вроде как в этой задаче не используются квадратные уравнения?).

Добавлено через 18 минут
Цитата:

Сообщение от PlutDem (Сообщение 1090266)
alatarИ не будет ли ответ разным если поменять окружности местами? Т.е. есть ли разница между этим
t >= s2-s1+r1+r2 / (v1 - v2)
и этим
t >= s1-s2+r2+r1 / (v2 - v1)
выражением?

Нет разницы.

Вот ваша формула:
Код:

( (s1+ v1*t)-(s2 + v2*t) )^2 = (r1+r1)^2
Вот она же, только в нормальном виде:
Код:

ABS((s1+ v1*t)-(s2 + v2*t))  <= r1+r2
Добавлено через 32 минуты
Пардон, первый раз неправильно вывел
Код:

(r1+ r2 - ABS(s1 - s2)) / ABS(v1 - v2) <= ABS(t)

PlutDem 30.07.2012 17:08

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 то можно получить те же ответы, что и у меня, но только гораздо проще, спасибо!
Цитата:

Сообщение от alatar (Сообщение 1090267)
t — время.

Не, ну понятно что время:) А что за время? Что означает?

alatar 30.07.2012 17:25

А теперь подставьте эти "корни" в свое уравнение.

PlutDem 30.07.2012 17:44

Цитата:

Сообщение от alatar (Сообщение 1090278)
А теперь подставьте эти "корни" в свое уравнение.

В обоих случаях 9=3^2

alatar 30.07.2012 17:53

Код:

( (s1+ v1*t)-(s2 + v2*t) )^2 = (r1+r2)^2
Код:

( (22+ (-10)*0.95)-(5 + 10*0.95) )^2 = (1+2)^2
( (22+ (-9.5))-(5 + 9.5) )^2 = (1+2)^2
( 12.5-14.5)^2 = (1+2)^2
4 != 9

( (22+ (-10)*0.65)-(5 + 10*0.65) )^2 = (1+2)^2
( (22+ (-6.5))-(5 + 6.5) )^2 = (1+2)^2
( 15.5-11.5)^2 = (1+2)^2
16 != 9


PlutDem 30.07.2012 18:01

alatar
Моя ошибка, s1=21, в этом случае все правильно.
Ваша формула:
Код:

(r1+ r2 - ABS(s1 - s2)) / ABS(v1 - v2) <= ABS(t)
работает правильно, правда не понятно что она находит, конец или начало столкновения. Решив несколько примеров, пришел к выводу, что все таки конец, но как тогда найти начало?

alatar 30.07.2012 18:19

Для данных значений:
Конец столкновения
Цитата:

(r1+ r2 - ABS(s1 - s2)) / ABS(v1 - v2) <= ABS(t1)
Начало столкновения
Цитата:

(r1+ r2 - ABS(s2 - s1)) / ABS(v2 - v1) <= ABS(t2)
Какая вам в конце-концов разница, в промежутке t1 — t2 окружности пересекаются.

Добавлено через 2 минуты
Если имеется решение, конечно.


Часовой пояс GMT +4, время: 03:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.