![]() |
|
![]() ![]() ![]() |
|
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Есть два шарика. Известен радиус и координаты обоих. Нужно чтоб один шарик не мог попасть
в другой. Помогите пожалуйст! |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
учтановить им начальные скорости в противоположных направлениях
![]() а вообще не помешало бы нормально поставить вопрос... -------------------- qqq |
|||
|
||||
Dr.Drunk |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 12.1.2004 Где: Волжский Репутация: нет Всего: нет |
Elfet, Вы, условия нормально поставьте, где они находяться, как должны двигаться?
![]() --------------------
_Theory_ is when you know everything but nothning works._Practice_ is when everything works but no one knows why._IN THIS PLACE_ we're combining theory and practice -nothing works and no one knows why! |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Ну я вообщем пытался вот так сделать на с :
sqrt(pow(x2-x1, 2)+pow(y2-y1, 2))-r2-r1<0 Но так один шарик "прилепает" к другому[s]. Условия есть координаты x1 x2 y1 y2 и радиусы r1 r2 Нуна двигать их но чтоб они не попадали внутрь друг друга и если всё же попадут внутрь друг друга чтоб могли вылезти ![]() |
|||
|
||||
Lan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 12.3.2004 Где: Владимир Репутация: нет Всего: 1 |
Забавная постановка задачи.
Если то, что я понял - вернО, то шарики могут двигаться абсолютно хаотично и независимо друг от друга. И, спрашивается, в чём тогда проблема? ![]() |
|||
|
||||
setq |
|
|||
Unregistered |
зафиксировать столкновение наверно
? если да - то формула вроде правильная. |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
ага тока они прилепают друг к другу
![]() |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
![]() ![]() ![]() Теперь задача услажнилась ![]() ![]() ![]() ![]() |
|||
|
||||
dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: нет Всего: 25 |
Если данны x1,y1 x2,y2, x3,y3 x4,y4
---------------------------> X | | P1 _____ P2 | | | | | | | | | | P4|_____|P3 v Y и Xc,Yc то чтоб шарик не попал в прямоугольник: if (xc+R>x1 && xc-R<x3 && yc+R>y1 && yc-R<y3) - отталкиваем Для того чтоб не врезались 2 прямоугольника для каждой вершины одного проверяем так же как для круга но с R=0 Кажись так ![]() Это сообщение отредактировал(а) dargaard - 12.5.2004, 22:57 -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
Crot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 31.1.2004 Репутация: нет Всего: 3 |
А по какому закону двигаются шарики? |
|||
|
||||
Elfet |
|
||||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Crot , произвольно
![]()
ето что? ![]()
и ето не совсем понял ![]() |
||||
|
|||||
dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: нет Всего: 25 |
Elfet
1) Это была попытка нарисовать x,y ось и прямоугольник (p1,p2,p3,p4 - учитывалось что в такой последовательности даны координаты) --------------------- 2) Для того чтоб не врезались 2 прямоугольника для каждой вершины одного проверяем так же как для круга но с R=0 Имелось в виду по формуле if (xc+R>x1 && xc-R<x3 && yc+R>y1 && yc-R<y3) при этом берем R=0, x1,y1 и x3,y3 - координаты первого прям. а xc,yc - координаты каждой вершины второго например: если даны координаты 2х прямоугольников (xA1, yA1 xA2,yA2, xA3, yA3, xA4, yA4) и (xB1, yB1 xB2, yB2, xB3, yB3, xB4, yB4) то if (xA1 > xB1 && xA1 < xB3 && yA1 > yB1 && yA1 < yB3) - отталкиваем if (xA2 > xB1 && xA2 < xB3 && yA2 > yB3 && yA2 < yB3) - отталкиваем тоже самое для (xA3,yA3) и (xA4, yB4) -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
Crot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 31.1.2004 Репутация: нет Всего: 3 |
Подожди, подожди... Если я правильно понял, у тебя координаты центра шарика меняются через определённый временной интервая на постоянную величину ? |
|||
|
||||
beif |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 25.8.2003 Где: Россия, Кемерово Репутация: 1 Всего: 1 |
А если прямоугольники "мысленно" вписать в круги и следить чтобы они не сталкивались... т.е. свести задачу к ранее решенной.. ?
![]() |
|||
|
||||
dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: нет Всего: 25 |
beif
Не очень выидет по моему - для прямоугольника со сторонами 5 и 1 к примеру ![]() отталкивание будет поисходить от попадания в зеленые участки -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
А у меня примоугольник 4 и 5 , а шары 30-50 так что незаметно
![]() |
|||
|
||||
student0511 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
А как лучше всего написать обработку движения шариков, если их не 2, а, предположим, 10 или 16, как сделать чтобы они не пересекались? Я написал функцию, которая не даёт пересечься 2 шарикам при их независимом движении: скажем, один летит под углом 30 гр, а другой 210, если они должны пересечься, то они попросту друг друга обходят.
Вот функция, которая преобразует координаты, если шар 1 должен пересечься с шаром 2:
Переменная S отвечает за расстояние м/у центрами, угол alpha - это угол, через который я определяю точку пересечения прямой с 1 шаром, соединяющую центр 1-ого и 2-ого, соответственно beta - это то же самое, но по отношению ко 2-ому шарику. Точка A - точка пересечения вышеупомянутой прямой с 1-ым шариком, соответственно, в ней и будет пересекаться шарики. Далее, используя точку A, я сдвигаю центр второго шара. Переменные cxClient - ширина экрана, cyClient - высота. Вообщем, будет 4 случая: шар 2 находится либо в 1-ой четверти, либо во 2-ой, либо в 3-ей, либо в 4-ой отностительно 1-ого шара, либо на одном и том же уровне с ним по y-координате или по x-координате. Итак, а как терь лучше, используя данную функцию написать случай с более, чем 2-мя шарами, нужно, чтобы их было > 10 хотя бы. Пока я обрабатываю сообщение WM_PAINT по нажатию клавиатуры вот так:
Где void BALL::calc() вычисляет координаты шаров, void BALL::draw(HDC, const int) рисует i шар, count - это текущее количество шаров (count < 16), которое увеличивается при нажатии пробела и уменьшается при использовании VK_DELETE:
Вообщем, если таким образом обрабатывать WM_PAINT, то при большом скоплении шаров некоторые заступают друга на друга, что не есть гуд ![]() Может проблема в cross'е? Надеюсь на вашу помощь, а то курсач на след. недели сдавать, а ещё надо описать столкновение... Заведомо благодарен, сильно не пинайте за корявый код ![]() Это сообщение отредактировал(а) student0511 - 22.5.2008, 21:31 Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
||||||
|
|||||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
Неужели никто не писал что-то подобное? ведь должны же быть подобные работы.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |