global real OffsetX
global real OffsetY
 
function OffsetXY uses real x, real y, real a, real d return nothing
  set OffsetX =  (x + d * Cos(a * bj_DEGTORAD))
  set OffsetY  = (y + d * Sin (a * bj_DEGTORAD))
 endfunction

function OffsetXYAngle uses real x, real y, real a, real d return nothing
  if(a == 0) then
   set OffsetX  = x + d;
  elseif (a == 90) then
   set  OffsetY   = y + d;
  elseif (a == 180) then
    set OffsetX  = x - d;
  elseif (a == 270)then
   set  OffsetY   = y - d;
  endif
 endfunction
Правда ли что OffsetXYAngle будет быстрее чем OffsetXY (смещение нужно только на углы 0,90,180,270)?
`
LOADING AD...

Only a small set of comments around the pointed one shown. Go to actual.
6
Есть еще вот такой вариант без условий, но не будет ли обращение к массиву в итоге дольше?
funtion OffsetXYIni uses nothing return nothing
set OffsetArray[1 ] = 1
set OffsetArray[2 ] = 0
set OffsetArray[91 ] = 0
set OffsetArray[92 ] = 1
set OffsetArray[181] = -1
set OffsetArray[182] = 0
set OffsetArray[271] = 0
set OffsetArray[272] = -1
endfunction
function OffsetXYAngle2 uses real x, real y, int a, int d return nothing
set OffsetX = x + OffsetArray[a+1]*d
set OffsetY = y + OffsetArray[a+2]*d
endfunction

или тригонометрические операции так и реализованы через заранее просчитанные значения, где каждый градус это индекс массива? и поэтому бессмысленно что то оптимизировать?
26
Выйгрыш обычного расчета в том, что он является самым гибким с точностью.
Если угол будет равен 181.375, то ты получишь точный результат, а не приблизительный от 181 или 182
А так - да, ты можешь сделать отдельные функции на "+n влево", "+n вверх" и т.п.
31
Правда ли что OffsetXYAngle будет быстрее чем OffsetXY (смещение нужно только на углы 0,90,180,270)?
Будет, потому что нет тригонометрических функций, простая математика. Только зачем тогда угол вообще передавать?

то ты получишь точный результат
Настолько точный что 0.1 + 0.2 == 0.3?
28
nazarpunk, кстати, в JASS это действительно так. Но есть нюанс.
26
nazarpunk:
Настолько точный что 0.1 + 0.2 == 0.3?
Ну это уже к движу вопросы... Но ты конечно же предлагаешь сделать вавилонскую библиотеку.
38
Там вызов любой функции через такое заднее место сделан, что математика - не то, о чем стоит беспокоиться
Синус и косинус больше нагрузки дадут чисто из-за вызова
15
У тебя эти проверки на значение угла породят больше байткода, чем обычный вызов функции.
Only a small set of comments around the pointed one shown. Go to actual.
To leave a comment please sign in to the site.