Goodie
offline
Опыт:
2,825Активность: |
Заполнение объектов в кругу. Нужны формулы =/
Есть такой код:
((код jass
int A = 0 int count = 10 real C = 360/count real radius = 100.00 real x = 00.00 real y = 00.00 do{ x = GetUnitX(u) + radius * Cos( Deg2Rad( C * A ) ) y = GetUnitY(u) + radius * Sin( Deg2Rad( C * A ) ) DestroyEffect(AddSpecialEffect("Boom.mdl",x,y)) }whilenot(A++==count) )) Этот код создает юнитов по кругу. А как сделать чтобы весь круг заполнялся? Типо вот как у Nevermore или же как у TideHunter |
07.04.2013, 14:42 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zetox
offline
Опыт:
1,698Активность: |
двойной цикл, в котором "radius" повышается.
ну или можно в одном, но radius повышать в опр. момент. Отредактировано Zetox, 07.04.2013 в 15:37. |
07.04.2013, 15:23 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
вложенные циклы допускаются. |
07.04.2013, 16:22 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Goodie
offline
Опыт:
2,825Активность: |
сделал двойной цикл, и карта как висанула |
07.04.2013, 17:17 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zetox
offline
Опыт:
1,698Активность: |
значит условия выхода из цикла не корректные.
|
07.04.2013, 17:45 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Goodie
offline
Опыт:
2,825Активность: |
Можно как нить код шоле. Не могу что то никак добится такого круга |
07.04.2013, 23:05 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
где код? не вижу,или ты юзал libastral.so ? |
07.04.2013, 23:44 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
>Deg2Rad( C * A )
>int A = 0 Я один чего-то не понимаю? Оно же всегда нулю будет равно. |
08.04.2013, 00:01 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
|
08.04.2013, 00:18 | #9
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Никогда не делайте так. Пожалуйста. |
08.04.2013, 02:50 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
ScorpioT1000:
а почему) |
08.04.2013, 03:15 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Потому что это маленький быдлокод.
Что касается расстановки юнитов, то это отчасти дискретная задача. Надо понять, что такое вообще "заполнить область"?
Допустим, область заполняется по квадратной сетке: Сторона этой сетки равна диаметру юнита.
Сначала нам надо задать область. Область - круг. (т.е. радиус и центр-точка)
Далее надо найти на сетке все точки, которые находятся внутри этого круга:
Для этого надо написать функцию IsPointInCircle,
Пройтись надо не по всей сетке, а только по той, где будет предполагаемо находиться круг, тоесть берем координаты центра круга и вычитаем его радиус, это будет начало.
Берем координаты центра круга и прибавляем его радиус, это будет конец. Шаг = диаметр юнита. Ну и далее проходим от начала до конца с заданным шагом в 2D пространстве (т.е. двойной цикл - для x и для y) и заносим координаты найденых точек в массив. И создать нужных юнитов =) |
08.04.2013, 03:43 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
Goodie, ульт невермора из доты сделан не дамми юнитами а дамми кастом волны силы по радиусу.... |
08.04.2013, 03:58 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
потому что вы должны перед тем как спрашивать скомпилировать код и посмотреть во что он скомпилирован.
есть масса примеров такого плана которые создают код отличный от а = а + 1 |
08.04.2013, 11:53 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Ну, тут всё будет православно, но оно порождает быдлокод в будущем. Например, было
while(i++ > 5)
потом станет
while(i++ > GetCount())
потом захочется каунт кудато записывать
while(i++ > count = GetCount())
да, и такое бывает. |
08.04.2013, 12:51 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Goodie
offline
Опыт:
2,825Активность: |
Ничего не понял. да есть же какая то формула, которая просто создает круги с начального радиуса, заканчивающая конечным радиусом |
09.04.2013, 20:16 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
Goodie, допустим в ближайшем 1 кругу 4 юнита,во 2 - 6,в 3 - 8,в 4 - 10,в 5 - 12,в 6 - 14 между кругами расстояние 50\75\125\200\350\650 заполнять круги умеешь,формулу увеличение подберешь если не можешь выразить формулой,делай как умеешь,без собственных результатов тему не открою |
09.04.2013, 20:41 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|