![]()
JaBeN_Симфер
![]() ![]() offline
Опыт:
20,050Активность: |
Как вычислить координаты для каста?
Один из случаев - нахождение точек пересечения окружностей. Сравнить их расстояние до героя и выбрать ближайшую. Но может быть много случаев расположения целей и я не могу придумать универсальный алгоритм. |
![]() |
#1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
quq_CCCP
Я белый и пушистый!
![]() ![]() offline
Опыт:
93,683Активность: |
посчитать сколько есть допустимых целей в окружности с радиусом R вокруг каждой цели и выбрать максимальное число... |
![]() |
#2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
JaBeN_Симфер
![]() ![]() offline
Опыт:
20,050Активность: |
Выбрал, а координаты то где? |
![]() |
#3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Doc
![]() offline
Опыт:
63,163Активность: |
Гений
Тебе нужно вписать многоугольник в окружность. Вот и бери все возможные выпуклые многоугольники, определяй необходимый радиус и центр окружности в которую этот многоугольник вписан, сравнивай расстояние до центра и радиус с нужными тебе параметрами, выбирай нужную окружность. Магия. |
![]() |
#4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
JaBeN_Симфер
![]() ![]() offline
Опыт:
20,050Активность: |
Doc, Уважаемый друг, будь любезен, нарисуй графически то, что ты написал, а то как-то сумбурно звучит.
JaBeN_Симфер добавил: Задача в том, что меня интересуют координаты не центра между целями, а той точки, которая является ближайшей к герою, но покрывающая своим радиусом группу целей, как на картинке. |
![]() |
#5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]()
online
Опыт: отключен
|
сначала поставить xgm.guru/p/wc3/sc-sorted-selector (в примере - как выбрать всех юнитов в допустимом радиусе каста)
можно и руками с forgroup итп дальше
простой способ: сравним каждый с каждым, т.е. создаем массив центра координат между каждой группой юнитов (какраз селектор поможет пробежаться по всем и не париться с group и прочей ерундой) тоесть если есть юниты a,b,c то у нас получится список центров a-b-с, a-b, a-c, b-c (оптимизируется от a-b, a-c, b-a, b-c, c-a, c-b, a-b-c, b-a-c, c-a-b, c-b-a) дальше если надо взять самую весомую группу, то берем центр с самым большим количеством юнитов, у нас это a-b-c и бабахаем по этим юнитам дамагом
если надо взять ближайшую, считаем дистанции до каждого центра и также бабахаем
ScorpioT1000 добавил:
элемент списка выглядит примерно так в итоге
только щас понял, что там не центры, ну тогда надо вписывать многоугольник в окружность
и как вот тут поступать
там надо будет сравнить, у какой группы больше юнитов, потом взять большие и у них уже сравнить, центр какой ближе к тебе
и тогда да, будет самое оптимальное решение, это двумерная задача математической оптимизации решений это задача не для жасса |
![]() |
#6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DioD
![]() ![]() offline
Опыт:
45,134Активность: |
|
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]()
online
Опыт: отключен
|
частный случай
кто там у нас математик
Надо нарисовать такую окружность, центр которой (искомая точка) будет ближе всех к кастеру, при этом она будет включать целевых юнитов внутри себя
надо найти общий случай, число целевых юнитов может быть сколько угодно
причем не все могут вписаться в окружность
все радиусы константны и равны одному числу Отредактировано ScorpioT1000, 13.03.2015 в 12:40. |
![]() |
#8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
JaBeN_Симфер
![]() ![]() offline
Опыт:
20,050Активность: |
Все оказалось проще, чем я думал. Достаточно просто найти точки пересечения окружностей вокруг целей. Сначала надо отсортировать все цели по отдаленности от героя в порядке убывания (от самых дальних к ближним). Затем проверить все точки на идеальную группу:
1я точка - на позиции героя loop 2я точка - на отрезке между героем и первой отсортированной целью 3я и 4я точки будут точками пересечения окружностей между первой и второй (и каждой последующей) целью endloop Из-за такой сортировки отсутствуют дублирующие результаты и в группировку не попадают цели, находящиеся дальше, чем опорная цель. Спасибо всем, кто уделил этому время. |
![]() |
#9
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]()
online
Опыт: отключен
|
Мои поздравления =) |
![]() |
#10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|