Войти
РаботаФорумРазовая работа

Требуется программист математик - коллизии с обходом пути (Snow Pandora, Riga)

#0
21:34, 30 янв. 2017

Реализовать коллизию (и реакцию на нее) окружностей в 2Д.

1. Заданы: радиусы окружностей, направления движений и скорости (вектор скорости за текущий кадр).
2. Окружности с большим радиусом должны больше влиять на окружности с меньшим радиусом при вычислении реакции на коллизию. Окружности с меньшим радиусом тоже влияют на окружности с большим радиусом, но в меньшей степени.
3. После столкновения окружности должны обтекать друг друга.
4. Окружности могут быть неподвижными.
5. Имеются неподвижные окружности, на которые остальные окружности не влияют (должны считаться в конце всех коллизий и иметь заключительное слово: вытолкнуть из себя все остальные окружности).
6. Прерогативой является скорость вычислений (минимальное количество "долгих" операций, таких как квадратный корень), точность вычислений - вторична.

Для реализации данной задачи может подойти просто математик, который предоставит математическое решение данной задачи, а мы его реализуем программно.

Если задача вам по зубам, то я буду крайне раз пообщаться с вами:


#1
0:14, 31 янв. 2017

так обтекать или отталкивать?
path finding или физика?

#2
12:45, 31 янв. 2017

И не то, и не другое в чистом виде. Задача довольно подробно описана. Наверное, стоит пояснить только момент обхода окружностей друг друга. У окружностей есть конечная точка к которой они стремятся. Из этого вычисляется вектор их движения в текущем кадре. Если произошла коллизия окружностей, то они должны "обтечь" друг друга. Т.е. для каждой из столкнувшихся окружностей находится вектор отклонения от их движения к конечной точке по прямой. Он должен быть минимальным, но достаточным, чтобы окружности не входили друг в друга.
Изображение

#3
23:40, 1 фев. 2017

На самом деле задача не так уж и подробно описана. Например, не ясно, что подразумевается под "влиянием". И по гифке не понятно, куда смотреть, чтобы понять, в чём проявляется разность влияния окружностей с разными радиусами.

А простое выталкивание вам почему не подходит? Если выталкивать не физической силой, а чисто геометрически, должно получиться примерно то, что вы и хотите (если я правильно идею понял).

#4
10:04, 2 фев. 2017

DistinGa
> Если выталкивать не физической силой, а чисто геометрически, должно получиться примерно то, что вы и хотите
Наверное, если выталкивать чисто геометрически, то будут "застревания", например на встречных курсах.

#5
10:22, 2 фев. 2017

Будут они или не будут, стороннему наблюдателю невозможно определить, потому что не описана вся модель поведения. Также как и требования к результату не вполне чёткие. Например, всё из-за того же не раскрытия понятия "влияние", не ясно, как должно происходить взаимодействие: по физическим законам с сохранением импульса или как-то ещё.

ПС
И вообще, если завести тему в разделе программирования, там можно получить полезные советы. Программисты, судя по первому посту, есть.

#6
10:35, 2 фев. 2017

На мой взгляд, все понятно. Отсутствует какое-либо упоминание о физике, и точность вычислений - вторична, значит речь идет чисто о геометрической задаче, без трений и даже импульсов. Насчет влияния - тоже вроде понятно. При коллизии меньший шарик должен дальше уклониться от своего маршрута, обходя более больший.

#7
10:45, 2 фев. 2017

Возможно, и так. Но без подтверждения автора это остаётся пока догадками.

Нельзя исключать вероятность того, что автор - творческая натура со своим особым видением :)

#8
13:23, 2 фев. 2017

Подтверждаю :)

#9
13:57, 2 фев. 2017

Тогда чем не нравится простое выталкивание?

#10
15:57, 2 фев. 2017

Задача решена, вакансия закрыта.

РаботаФорумРазовая работа

Тема в архиве.