首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何绕过math.clamp (Lua)

如何绕过math.clamp (Lua)
EN

Stack Overflow用户
提问于 2022-06-27 15:36:06
回答 2查看 989关注 0票数 0

如何绕过math.clamp?

下面是一个简单的math.clamp脚本:

代码语言:javascript
运行
复制
local number = 10
number = math.clamp(number,1,5) -- This will make the number 5

我将如何绕过它,使math.clamp仍然使其为10,而不是最大值。和它有可能吗?

EN

回答 2

Stack Overflow用户

发布于 2022-06-27 15:40:07

那就分配10,不要打电话给math.clamp?

另一种覆盖math.clamp

代码语言:javascript
运行
复制
function math.clamp(number) return number end
票数 2
EN

Stack Overflow用户

发布于 2022-06-27 17:20:52

假设以下简单的math.clamp实现

代码语言:javascript
运行
复制
function math.clamp(x, min, max)
    if x < min then return min end
    if x > max then return max end
    return x
end

nan是唯一不能正确夹紧的值,因为nan (nan < minnan > max)上的每个操作都计算为false --if不会触发。不过,无穷大(math.huge)的行为与预期的一样。

使用math.minmath.max的较短的表单的行为相同:

代码语言:javascript
运行
复制
function math.clamp(x, min, max)
    return math.max(math.min(x, max), min)
end

因为math.minmath.max都会产生nan,如果任何输入都是nan!因此,如果nannan (可以通过0/0获得),这个夹紧函数可能会返回nan(这可能是意外的)。不过,这将是您在min-max范围之外能够通过此函数获得的唯一值。

可能的nan-safe实现如下所示:

代码语言:javascript
运行
复制
function math.clamp(x, min, max)
    if x ~= x then return min end -- explicit nan handling
    if x < min then return min end
    if x > max then return max end
    return x
end

代码语言:javascript
运行
复制
function math.clamp(x, min, max)
    if x >= min then
        if x <= max then return x end
        return max
    end
    return min
end

两者都会将nan夹到min (这是一个任意的选择)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72774752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档