代码之家  ›  专栏  ›  技术社区  ›  Dirk Boer

将一个数字范围映射到另一个数字范围的通用名称是什么?

  •  0
  • Dirk Boer  · 技术社区  · 7 年前

    我很确定这是一个常见的模式,但我正在寻找一个数字范围与另一个数字范围相匹配的模式名称。类似于:

    Map(from1: 60, to1: 90, from2: 100, to2: 140, value: 75);  // Result: 120 (middle of from2/to2)
    Map(from1: 60, to1: 90, from2: 100, to2: 140, value: 30);  // Result: 100 (clamped bottom)
    Map(from1: 60, to1: 90, from2: 100, to2: 140, value: 60);  // Result: 100 (bottom)
    Map(from1: 60, to1: 90, from2: 100, to2: 140, value: 500); // Result: 140 (clamped to2)
    Map(from1: 60, to1: 90, from2: 100, to2: 140, value: 85);  // Result: 133.33 (in between)
    

    这个方法叫什么名字?我特别想在Unity中找到一个解决方案,但是我很确定如果我知道模式的名称,我可以找到它。

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   Dirk Boer    7 年前

    啊,没关系-我在一个虚幻的引擎教程中发现了它:

    https://www.youtube.com/watch?v=11T4UvkVYb8

    以下是C#的代码:

    public static class FloatExtensions
    {
        public static float MapRange(this float value, float from1, float to1, float from2, float to2, bool clamp = false) 
        {
            if ( clamp )
            {
                if ( value < from1 )
                    return from2;
                if ( value > to1 )
                    return to2;
            }
    
            return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
        }
    }