代码之家  ›  专栏  ›  技术社区  ›  Tom McLean

如何创建一个函数,将值包装在循环nature中的最小值和最大值之间?

  •  0
  • Tom McLean  · 技术社区  · 2 年前

    我有一个函数,用于将值映射到-180和180之间:

    min_ = -180
    max_ = 180
    range_ = (max_ - min_)
    
    def min_max_map(value):
        return (value + max_) % range_ - range_/2
    
    print(min_max_map(200)) # -160
    print(min_max_map(200 + 360)) # -160 again
    

    然而,当我想在最小和最大边界上移动时,答案是错误的:

    min_ = -180 - 360
    max_ = 180 - 360
    range_ = (max_ - min_)
    
    def min_max_map(value):
        return (value + max_) % range_ - range_/2
    
    print(min_max_map(200)) # -160 rather than -160 - 360 = -520
    

    我不知道如何修正我的公式。如何将我的公式推广到映射任何最小值和最大值?

    0 回复  |  直到 2 年前
        1
  •  3
  •   Kelly Bundy    2 年前
    def min_max_map(value):
        return (value - min_) % range_ + min_
    
        2
  •  -1
  •   Buffoonism    2 年前

    为什么不直接使用内置的python min max 功能?类似于:

    return min( 180, max( -180, value ) )