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)?
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
5
3 месяца назад
Отредактирован CopyPaster
0
Есть еще вот такой вариант без условий, но не будет ли обращение к массиву в итоге дольше?
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

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

то ты получишь точный результат
Настолько точный что 0.1 + 0.2 == 0.3?
0
28
3 месяца назад
0
nazarpunk, кстати, в JASS это действительно так. Но есть нюанс.
0
26
3 месяца назад
0
nazarpunk:
Настолько точный что 0.1 + 0.2 == 0.3?
Ну это уже к движу вопросы... Но ты конечно же предлагаешь сделать вавилонскую библиотеку.
0
5
3 месяца назад
0
А как ты проверяешь задержку?
0
27
3 месяца назад
0
CopyPaster, мемхаком
1
37
3 месяца назад
Отредактирован ScorpioT1000
1
Там вызов любой функции через такое заднее место сделан, что математика - не то, о чем стоит беспокоиться
Синус и косинус больше нагрузки дадут чисто из-за вызова
0
15
3 месяца назад
0
У тебя эти проверки на значение угла породят больше байткода, чем обычный вызов функции.
0
37
3 месяца назад
0
JackFastGame, совершенно наоборот тому, что ты сказал)

Существуют fast sin/cos реализации
Можно портировать. Но как будто это всё вершина айсберга, на практике ещё надо проверять проходимость и выходы за границы карты
0
29
3 месяца назад
0
что математика - не то, о чем стоит беспокоиться
Даладно. Как оказалось, умножение в жассе сравнимо с вызовом функции.
1
37
3 месяца назад
Отредактирован ScorpioT1000
1
В любом случае вот эти метрики полный бред, посмотрите xdestr и сколько там вычислений, ничего не фризило

Может это он так криво микросекунды написал, тогда похоже на правду
Чтобы оставить комментарий, пожалуйста, войдите на сайт.