Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.07.2012, 14:44
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 1  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
По умолчанию Проверка столкновения отрезков на числовой прямой зависящее от времени.

Здравствуйте, есть два отрезка на числовой прямой, движущихся по этой прямой с различной скоростью. Нужно написать функцию, которая вернула бы время когда эти отрезки столкнулись бы(если они вообще когда нибудь столкнутся). Для удобства я представил отрезки окружностями и вычислял время столкновения вот по этой формуле:
Код AS1/AS2:
( (s1+ v1*t)-(s2 + v2*t) )^2 = (r1+r1)^2
Где: s - текущие координаты окружности, v - скорость движения окружности, t - время, r - радиус.
Нужно найти такое значение t когда расстояние между окружностями будет равно сумме их радиусов. "На бумаге" все работает как надо, но на практике... Первая проблема с которой столкнулся, это если скорость какого либо отрезка равна нулю, то уравнение не решается. Если на момент проверки отрезки уже пересекаются, то уравнение так же не имеет решений.
прошу помочь найти универсальный способ проверки.

Старый 30.07.2012, 15:41
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Что бы решалось замените = на <=

Добавлено через 16 минут
t >= s2-s1+r1+r2 / (v1 - v2)
Решения не будет если v1 = v2 (скорости одинаковы и однонаправлены), либо если отрезки движутся в разные стороны.
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 30.07.2012 в 15:59.
Старый 30.07.2012, 16:20
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 3  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

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

Старый 30.07.2012, 16:29
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
t — время.
Это не квадратное уравнение.

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

Добавлено через 18 минут
Цитата:
Сообщение от PlutDem Посмотреть сообщение
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)
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 30.07.2012 в 17:39.
Старый 30.07.2012, 17:08
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 5  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
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 Посмотреть сообщение
t — время.
Не, ну понятно что время А что за время? Что означает?


Последний раз редактировалось PlutDem; 30.07.2012 в 17:59.
Старый 30.07.2012, 17:25
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
А теперь подставьте эти "корни" в свое уравнение.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.07.2012, 17:44
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 7  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Цитата:
Сообщение от alatar Посмотреть сообщение
А теперь подставьте эти "корни" в свое уравнение.
В обоих случаях 9=3^2

Старый 30.07.2012, 17:53
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 8  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код:
( (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
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.07.2012, 18:01
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 9  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
alatar
Моя ошибка, s1=21, в этом случае все правильно.
Ваша формула:
Код:
(r1+ r2 - ABS(s1 - s2)) / ABS(v1 - v2) <= ABS(t)
работает правильно, правда не понятно что она находит, конец или начало столкновения. Решив несколько примеров, пришел к выводу, что все таки конец, но как тогда найти начало?

Старый 30.07.2012, 18:19
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Для данных значений:
Конец столкновения
Цитата:
(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, время: 13:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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