XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
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
Zetox

offline
Опыт: 1,738
Активность:
двойной цикл, в котором "radius" повышается.

ну или можно в одном, но radius повышать в опр. момент.

Отредактировано Zetox, 07.04.2013 в 15:37.
Старый 07.04.2013, 15:23
DioD

offline
Опыт: 45,134
Активность:
вложенные циклы допускаются.
Старый 07.04.2013, 16:22
Goodie

offline
Опыт: 2,825
Активность:
сделал двойной цикл, и карта как висанула
Старый 07.04.2013, 17:17
Zetox

offline
Опыт: 1,738
Активность:
значит условия выхода из цикла не корректные.
Старый 07.04.2013, 17:45
Goodie

offline
Опыт: 2,825
Активность:
Можно как нить код шоле. Не могу что то никак добится такого круга
Старый 07.04.2013, 23:05
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
где код? не вижу,или ты юзал libastral.so ?
Старый 07.04.2013, 23:44
Variecs

offline
Опыт: 2,508
Активность:
>Deg2Rad( C * A )
>int A = 0
Я один чего-то не понимаю? Оно же всегда нулю будет равно.
Старый 08.04.2013, 00:01
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
whilenot(A++==count)
Старый 08.04.2013, 00:18
ScorpioT1000
Работаем
offline
Опыт: отключен
whilenot(A++==count)
Никогда не делайте так. Пожалуйста.
Старый 08.04.2013, 02:50
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
ScorpioT1000:
whilenot(A++==count)
Никогда не делайте так. Пожалуйста.
а почему)
Старый 08.04.2013, 03:15
ScorpioT1000
Работаем
offline
Опыт: отключен
Потому что это маленький быдлокод.
Что касается расстановки юнитов, то это отчасти дискретная задача. Надо понять, что такое вообще "заполнить область"?
Допустим, область заполняется по квадратной сетке:
Сторона этой сетки равна диаметру юнита.
Сначала нам надо задать область. Область - круг. (т.е. радиус и центр-точка)
Далее надо найти на сетке все точки, которые находятся внутри этого круга:
Для этого надо написать функцию IsPointInCircle,
// cJass
bool IsPointInCircle(float pointX, float pointY, float circleX, float circleY, float circleRadius) {
	pointX = (circleX - pointX)
	pointY = (circleY - pointY)
	return (pointX*pointX + pointY*pointY) <= (circleRadius * circleRadius);
}
Пройтись надо не по всей сетке, а только по той, где будет предполагаемо находиться круг, тоесть берем координаты центра круга и вычитаем его радиус, это будет начало.
Берем координаты центра круга и прибавляем его радиус, это будет конец.
Шаг = диаметр юнита.
Ну и далее проходим от начала до конца с заданным шагом в 2D пространстве (т.е. двойной цикл - для x и для y) и заносим координаты найденых точек в массив.
И создать нужных юнитов =)
Старый 08.04.2013, 03:43
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Goodie, ульт невермора из доты сделан не дамми юнитами а дамми кастом волны силы по радиусу....
Старый 08.04.2013, 03:58
DioD

offline
Опыт: 45,134
Активность:
а почему)
потому что вы должны перед тем как спрашивать скомпилировать код и посмотреть во что он скомпилирован.
есть масса примеров такого плана которые создают код отличный от а = а + 1
Старый 08.04.2013, 11:53
ScorpioT1000
Работаем
offline
Опыт: отключен
Ну, тут всё будет православно, но оно порождает быдлокод в будущем. Например, было
while(i++ > 5)
потом станет
while(i++ > GetCount())
потом захочется каунт кудато записывать
while(i++ > count = GetCount())
да, и такое бывает.
Старый 08.04.2013, 12:51
Goodie

offline
Опыт: 2,825
Активность:
Ничего не понял. да есть же какая то формула, которая просто создает круги с начального радиуса, заканчивающая конечным радиусом
Старый 09.04.2013, 20:16
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
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 00:17.