“魔兽世界”附加组件的正弦波方程

时间:2015-08-21 10:43:12

标签: math lua world-of-warcraft

我正在为“魔兽世界”创建一个附加组件。

我有这个:

if edirection == "moon" then sffem = 105*math.sin(math.pi - math.asin(cpower/105) + math.pi/20 * sfcasttime) end

这个工作正常,但我需要将截止点设置为100和-100。

这是因为我的角色的能量是基于一个正弦波,从0开始下降到-100,在那里停留几秒钟,然后回到0上升到100并停留几秒钟并返回到0. / p>

这是因为正弦波的能量为105,-105,但最大和最小的玩家能量为100。

我试过了:

if edirection == "moon" then sffem = (MAX(-100;MIN(100;105*math.sin(math.pi - math.asin(cpower/105) + math.pi/20 * sfcasttime)))) end

这只是一个错误。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

没有必要在一行中完成所有这些操作。例如,在行

之后
dvUpcomingLeave.RowFilter = String.Format("DATEPART(Month, joiningDate) = #{0}#",now.Month);

做类似

的事情
if edirection == "moon" then sffem = 105*math.sin(math.pi - math.asin(cpower/105) + math.pi/20 * sfcasttime) end

(感谢Henrik Ilgen的语法帮助)

答案 1 :(得分:0)

您的第二行代码是使用分号而不是逗号将参数分隔为MAXMIN

更改后的代码并使用math.minmath.max

if edirection == "moon" then sffem = math.max(-100,math.min(100,105*math.sin(math.pi - math.asin(cpower/105) + math.pi/20 * sfcasttime))) end

您可能会发现制作钳位辅助函数很有用:

function clamp(value, min, max)
  return math.max(min, math.min(max, value))
end

在这种情况下,您的代码变为:

if edirection == "moon" then sffem = clamp(105*math.sin(math.pi - math.asin(cpower/105) + math.pi/20 * sfcasttime), -100, 100) end