Добавлен ScorpioT1000,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Алгоритм
// Полярное смещение
function PolarOffset takes location loc, real dist, real angle returns location
local real x = GetLocationX(loc) + dist * Cos(angle * bj_DEGTORAD)
local real y = GetLocationY(loc) + dist * Sin(angle * bj_DEGTORAD)
call MoveLocation(loc, x, y)
return loc
endfunction
// Возвращает : Расстояние между двумя объектами (юнит, предмет, декорация = widget)
function DistanceBetweenWidgets takes widget widgetA, widget widgetB returns real
local real dx = GetWidgetX(widgetB) - GetWidgetX(widgetA)
local real dy = GetWidgetY(widgetB) - GetWidgetY(widgetA)
return SquareRoot(dx * dx + dy * dy)
endfunction
// Возвращает : Угол между двумя объектами
function AngleBetweenWidgets takes widget widgetA, widget widgetB returns real
return bj_RADTODEG * Atan2(GetWidgetY(widgetB) - GetWidgetY(widgetA), GetWidgetX(widgetB) - GetWidgetX(widgetA))
endfunction
// Возвращает : Расстояние между двумя углами
function GetAngleDifference takes real a1, real a2 returns real
local real x
set a1 = ModuloReal(a1, 360)
set a2 = ModuloReal(a2, 360)
if (a1 > a2) then
set x = a1
set a1 = a2
set a2 = x
endif
set x = a2 - 360
if (a2 - a1 > a1 - x) then
set a2 = x
endif
return RAbsBJ(a1 - a2)
endfunction
// Возвращает : Возвращает угол в центре двух углов
function GetMidAngle takes real a1, real a2 returns real
local real x
set a1 = ModuloReal(a1, 360)
set a2 = ModuloReal(a2, 360)
if (a1 > a2) then
set x = a1
set a1 = a2
set a2 = x
endif
set x = a2 - 360
if (a2 -a1 > a1-x) then
set a2 = x
endif
return (a1 + a2) / 2
endfunction
// Возвращает true : Если угол находится между двумя углами
function IsAngleBetweenAngles takes real angle, real angle1, real angle2 returns boolean
local real x
set angle = ModuloReal(angle, 360)
set angle1 = ModuloReal(angle1, 360)
set angle2 = ModuloReal(angle2, 360)
if (angle1 > angle2) then
set x = angle1
set angle1 = angle2
set angle2 = x
endif
if (angle2 - angle1) > (angle1 - (angle2-360)) then
set angle2 = angle2 - 360
if angle > 180 then
set angle = angle-360
endif
return angle >= angle2 and angle <= angle1
endif
return (angle >= angle1) and (angle <= angle2)
endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
мне пригодилось только функция GetMidAngle =_=