Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Наработка
---@param x real
---@param distance real
---@param angle real radian
---@return real
math.offsetX       = function(x, distance, angle)
	return distance * math.cos(angle) + x
end

---@param y real
---@param distance real
---@param angle real radian
---@return real
math.offsetY       = function(y, distance, angle)
	return distance * math.sin(angle) + y
end

---@param x real
---@param y real
---@param distance real
---@param angle real radian
---@return real, real
math.offsetXY      = function(x, y, distance, angle)
	return distance * math.cos(angle) + x, distance * math.sin(angle) + y
end

---@param zs real начальная высота одного края дуги
---@param ze real конечная высота другого края дуги
---@param h real максимальная высота на середине расстояния (x = d / 2)
---@param d real общее расстояние до цели
---@param x real расстояние от исходной цели до точки
---@return real
math.parabolaZ     = function(zs, ze, h, d, x)
	return (2 * (zs + ze - 2 * h) * (x / d - 1) + ze - zs) * (x / d) + zs
end

---@param xa real
---@param ya real
---@param xb real
---@param yb real
---@return real
math.distanceXY    = function(xa, ya, xb, yb)
	local dx, dy = xb - xa, yb - ya
	return math.sqrt(dx * dx + dy * dy)
end

---@param xa real
---@param ya real
---@param za real
---@param xb real
---@param yb real
---@param zb real
---@return real
math.distanceXYZ   = function(xa, ya, za, xb, yb, zb)
	local dx, dy, dz = xb - xa, yb - ya, zb - za
	return math.sqrt(dx * dx + dy * dy + dz * dz)
end

---@param xa real
---@param ya real
---@param xb real
---@param yb real
---@return real radian
math.angleXY       = function(xa, ya, xb, yb)
	return math.atan(yb - ya, xb - xa)
end

---@param a real radian
---@param b real radian
---@return real radian
math.angleDiff     = function(a, b)
	local c = a > b and a - b or b - a
	local d = a > b and b - a + 2 * math.pi or a - b + 2 * math.pi
	return c > d and d or c
end

--https://xgm.guru/p/wc3/iscoordsincircle
-- Проверяет, находится ли [x,y] в окружности [cx,cy] радиусом r
---@param x table
---@param y table
---@param cx table
---@param cy table
---@param r table
---@return boolean
math.inCircleXY    = function(x, y, cx, cy, r)
	return (cx - x) * (cx - x) + (cy - y) * (cy - y) < r * r
end

-- xgm.guru/p/wc3/warden-math
---@param a real degrees
---@param b real degrees
---@return real degrees
math.angleDiffDeg  = function(a, b)
	a, b = math.abs(a), math.abs(b)
	if a > b then
		a, b = b, a
	end
	local x = b - 360
	if b - a > a - x then
		b = x
	end
	return math.abs(a - b)
end

-- https://xgm.guru/p/wc3/perpendicular
-- Находит длину перпендикуляра от линии проходящей через [xa, ya][xb, yb] к точке [xc, yc]
---@param xa real
---@param ya real
---@param xb real
---@param yb real
---@param xc real
---@param yc real
---@return real
math.perpendicular = function(xa, ya, xb, yb, xc, yc)
	return math.sqrt((xa - xc) * (xa - xc) + (ya - yc) * (ya - yc)) * math.sin(math.atan(yc - ya, xc - xa) - math.atan(yb - ya, xb - xa))
end

Скачать

`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
7
5 лет назад
0
Хорошо бы сделать полноценную библиотеку на Lua с векторами, PolarProjection и т.д.
0
29
5 лет назад
0
PornoMishka, это я себе шпаргалку оставляю, как напримерс приказами. А так сам подумал о фрэймворке, который бы реализовал нужный функционал. Но пока нет IDE, которая бы из него подтягивала справку.
0
7
5 лет назад
0
NazarPunk, просто это вкупе с новым UI может перерасти в прекрасный аналог DGUI.
0
32
5 лет назад
Отредактирован Берги
0
По моему с атан2 что-то не так, возвращает число от -3 до 3 вместо 0-360 градусов
в jass формуле ещё какой-то bj_RADTODEG*atan2, вроде равен какой-то мелочи типа 0.0175, но всё равно угол не вернёт
Подставил bj_RADTODEG, всё заработало =)
0
15
5 лет назад
0
Капец, мне не нравится синтаксис Луа :(
0
28
5 лет назад
0
JackFastGame, да почти такой же, как и у JASS, только без типов, ибо язык динамический.
0
17
5 лет назад
0
PT153:
JackFastGame, да почти такой же, как и у JASS, только без типов, ибо язык динамический.
а что вот это такое?
---@param xa real
---@param ya real
---@param xb real
---@param yb real
---@param xc real
---@param yc real
---@return real
это удобно?
0
28
5 лет назад
Отредактирован PT153
0
Vlod, это аннотации, как во многих других языках (C#, Java, Python). Они необязательны для работы функции, а просто помогают разработчику понять, что за параметры и для чего они нужны. В динамических языках там же указывается ожидаемый тип.
Так-то комментарии в Lua обозначаются --.
0
17
5 лет назад
0
а что вот это такое?
В дополнение к сказанному PT153, эти аннотации используются редактором EmmyLua и расширением для VSCode с тем же названием в подсказках
Сразу становится понятно, какие данные функция принимает.
Загруженные файлы
2
24
5 лет назад
2
Я вам больше скажу - аналогичные аннотации и/или комментарии часто используются и в компилируемых языках, для формирования документации, и никто не пищит что это не удобно.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.