Хочу понять как работать с X и Y ( нешарю в джасе )
call SetUnitX(GetEnumUnit(), GetLocationX(udg_all_point[2]) )
call SetUnitY(GetEnumUnit(), GetLocationY(udg_all_point[2]) )
хочу сделать типа ветра сдувающего ( но если двигать стандартной мгновенно переместить юнитов стопит )( через X и Y не стопит )
если статья как работать с X и Y ?
вот карту что именно я хочу сделать

Принятый ответ

local location loc=GetUnitLoc(GetEnumUnit())
local location tcLoc=GetUnitLoc(udg_topot_caster)
local real a=AngleBetweenPoints(tcLoc, loc)
call SetUnitX(GetEnumUnit(),GetLocationX(loc) +CosBJ(a) * 10.00 )
call SetUnitY(GetEnumUnit(),GetLocationY(loc) +SinBJ(a) * 10.00 )
call RemoveLocation(tcLoc)
call RemoveLocation(loc)
set tcLoc=null
set loc=null
0
19
7 лет назад
0
Похожие вопросы:

ответ
Нашел проблему!
Зайди в переменную udg_Group и поставь разрядность массива больше одного (Вернее столько, сколько нужно). Юниты дальше и не идут, т.к. групп с индексом больше единицы просто не существует.

0
21
7 лет назад
0
Ну на примитивном уровне так и работать - считывать X и Y с точек и задавать SetUnitX / Y, чтобы действия не прекращались
Только еще проверка нужна, что координаты НЕ за пределами карты, чтоб не сфаталило
В идеале вообще локейшены не юзать, но это пока и мне тяжело
2
28
7 лет назад
2
В идеале вообще локейшены не юзать, но это пока и мне тяжело
А что тяжёлого в не использовании локаций (точек)?
0
17
7 лет назад
Отредактирован GetLocalPlayer
0
Нежелание использовать тип location порой доходит до абсурда. Временами приходилось видеть короткие структуры вида
struct
	real x
	real y
endstruct
лишь бы не использовать точки.
Что касательно темы, почему автора смущает вопрос использование координат объекта, вместо точек? Точки это та же пара координат X и Y упакованных вместе.
0
21
7 лет назад
0
PT153, привычно с точками просто уже, там у меня есть шаблоны, а на X/Y нет
хотя бы вот шаблон на линейное движение в одном направлении на X/Y пригодился бы
3
18
7 лет назад
Отредактирован Maniac_91
3
Есть статья про математическое движение: xgm.guru/p/wc3/mathmov
Вроде так:
u - юнит, x, y - координаты юнита; a - угол.
call SetUnitX(u, x*Cos(a))
call SetUnitY(u, y*Sin(a))
0
21
7 лет назад
0
Maniac_91, а угол как определять без точек?
4
18
7 лет назад
4
Координаты x, y, x2, y2.
set a = Atan2(y2-y, x2-x)
0
21
7 лет назад
0
Хорошо, спс
И еще не забыть проверять, что все это не вылазит за пределы карты
Понятно
2
18
7 лет назад
2
ClotPh, вообще, движение по координатам - это очень интересная тема. Через них можно сделать отталкивание (например, при взрыве) или наоборот - притягивание. А если периодически менять угол, то можно получить движение по спирали. Из того же ветра можно сделать торнадо.
0
21
7 лет назад
0
Maniac_91, да я знаю, я все это делаю, просто часто приходилось применять точки, а уже потом с них координаты снимать, спасибо за примеры
0
20
7 лет назад
0
скиньте потом пожалуйста, то, что получилось
0
28
7 лет назад
0
надо закинуть в раздел статей учебник по геометрии 7 класса
ибо подобных вопросов уже дофига видел
1
17
7 лет назад
1
nvc123:
надо закинуть в раздел статей учебник по геометрии 7 класса
ибо подобных вопросов уже дофига видел
Школьные учебники геометрии базируются на теоремах и доказательствах. С алгеброй примерно так же. Здешние вопросы относятся к аналитической геометрии.
0
28
7 лет назад
Отредактирован nvc123
0
GetLocalPlayer, без разницы на чём базируются
в них есть понятие координатной плоскости, теорема пифагора и определение синуса/косинуса
этого достаточно
2
17
7 лет назад
2
nvc123, в учебнике мы узнаем следующее:
  • Квадрат гипотенузы равен сумме квадратов катетов
  • Косинусом угла прямоугольного треугольника называется отношение прилежащего катета к гипотенузе
  • Синусом угла прямоугольного треугольника называется отношение противолежащего катета к гипотенузе
  • Так же мы узнаем о некоторых тригонометрических тождествах, отношениях синусов к косинусам и так далее
Ничего из вышеуказанного даже не намекает на работу связанную с поиском взаимного расположения точек. Я бы хотел посмотреть на учебник 7-го класса, в котором будет располагаться информация, позволяющая получить практические знания для проведения требуемой работы.
5
16
7 лет назад
Отредактирован DracoL1ch
5
Каюсь, в школе я больше пинал БИНОМЫ, чем учился, о чем немного и сожалею сейчас. Геометрия тоже была в списке "ненавижусука" предметов, поэтому движение и хитрости углов мне в итоге довелось изучить уже на примерах скиллов доты. Вот если бы хоть кто-нбудь показывал реальную применимость этих синусов в жизни, авось и учили бы их охотнее.
Другими словами - учись на примерах остальных. В 2д-системе, которой является варкрафт, нет нужды погружаться в пространственную геометрию, плоскости достаточно. Высота - обособленная координата без особых запросов Поэтому находи в любой карте навык с движением, которое тебе надо, и читай код.
Ну а если эстет и хочешь, чтобы юнит рисовал восьмерку с радиусом кривизны равным 3х навык абилки, тогда да, придется углубиться.
0
5
7 лет назад
0
начнем с 1 если бы кто то открыл бы мою карту там бы увидели что с косинусами и синусами я работать умею
2 ) причем тут геометрия если это математика 9 класс (если память не изменяет)
3 ) похоже я не умею формулировать вопросы ))))
4 ) call SetUnitPositionLoc( GetEnumUnit(), Location(( GetLocationX(GetUnitLoc(GetEnumUnit())) + ( CosBJ(AngleBetweenPoints(GetUnitLoc(udg_topot_caster), GetUnitLoc(GetEnumUnit()))) * 10.00 ) ), ( GetLocationY(GetUnitLoc(GetEnumUnit())) + ( SinBJ(AngleBetweenPoints(GetUnitLoc(udg_topot_caster), GetUnitLoc(GetEnumUnit()))) * 10.00 ) )) )
как это превратить
call SetUnitX SetUnitY ( пробовал сам варик не запускается )
1
16
7 лет назад
1
local location loc=GetUnitLoc(GetEnumUnit())
local location tcLoc=GetUnitLoc(udg_topot_caster)
local real a=AngleBetweenPoints(tcLoc, loc)
call SetUnitX(GetEnumUnit(),GetLocationX(loc) +CosBJ(a) * 10.00 )
call SetUnitY(GetEnumUnit(),GetLocationY(loc) +SinBJ(a) * 10.00 )
call RemoveLocation(tcLoc)
call RemoveLocation(loc)
set tcLoc=null
set loc=null
Принятый ответ
4
29
7 лет назад
Отредактирован Doc
4
Вы че тут рофлите просто? Че это за жесть. Ну попытались бы хоть развернуть формулы и посмотреть что вы конвертите из одного в другого а потом обратно, зачем?
// target = origin + normalize(source - origin) * speed
u = GetEnumUnit()
ux = GetUnitX(u)
uy = GetUnitY(u)

tx = GetUnitX(udg_topot_caster)
ty = GetUnitY(udg_topot_caster)

dx = ux - tx
dy = uy - ty

len = SquareRoot(dx * dx + dy * dy)
// Also need a 0 len check
dx = dx / len
dy = dy / len

SetUnitX(u, ux + dx * 10)
SetUnitY(u, uy + dy * 10)
struct
	real x
	real y
endstruct
Нужна только чтобы туда добавить методы для работы с векторами.
Углы, косинусы, синусы в большинстве случаев не нужны ВООБЩЕ.
1
16
7 лет назад
1
можно и развернуть, если есть желание. проще копипастить
0
28
7 лет назад
Отредактирован nvc123
0
not_name, я открыл и увидел что ты не знаешь даже определений синуса и косинуса не говоря уже о работе с ними
GetLocalPlayer, если тебе этой инфы не хватает чтобы научиться работать с координатами то лучше тебе бросить программирование и заняться вязанием
там координаты ненужны а вязанные носки всегда пригодятся
Doc:
Углы, косинусы, синусы в большинстве случаев не нужны ВООБЩЕ.
я имел ввиду определение косинуса и синуса из которых и выводится то что ты написал
про то что углы ненужны нафиг это понятно
их только если в параметрическом алгоритме окружности юзать можно
во всех остальных случаях легко справляются и без них
0
21
7 лет назад
0
^ только вы все забываете проверять, что x и y в пределах границы карты, при выходе за границы сразу будет фатал, если попытаться туда юнит пихнуть
0
28
7 лет назад
0
ClotPh, это уже должен автор вопроса делать
Чтобы оставить комментарий, пожалуйста, войдите на сайт.