【问题标题】:Map angles to a 0-1 range将角度映射到 0-1 范围
【发布时间】:2020-12-25 12:16:10
【问题描述】:

假设您有两个角度,并将它们标记为 0 和 1。然后您有另一个角度 x。您还知道从角度 0 到角度 1 是顺时针还是逆时针。如何计算可以描述第三个角度的数字?

例子:

Angle at 0 Angle at 1 Rotation Direction Target Angle Mapped number (x)
90° CCW 60° 2/3
90° CW 60° 1/3
180° CW 90° 1.5
180° CCW 90° 0.5

我遇到的问题:

  • 当 x 不能在 0 和 1 之间得到支持时(我可以接受它只是告诉我它不能这样做,但有数字会更酷)。
  • 从逆时针 (CCW) 切换到顺时针时。

【问题讨论】:

    标签: math geometry angle


    【解决方案1】:

    Check下一个办法:

    def ratio(x, a, b, dircw = False):
        if dircw:
            if x > a:
                x -= 360
            if b > a:
                b -= 360
        else:
            if b < a:
                b += 360
            if x < a:
                x += 360
    
        return (x-a)/(b-a)
    
    
    print(ratio(60, 0, 90))
    print(ratio(60, 0, 90, True))
    print(ratio(60, 90, 0, True))
    print(ratio(90, 0, 180, True))
    print(ratio(90, 0, 180))
    
    0.6666666666666666
    1.1111111111111112
    0.3333333333333333
    1.5
    0.5
    

    我们考虑线性方程的解(求解linear interpolation的逆)

    x = a*(1-t) + b*t
    

    对于未知的t

    我们必须进行标准化以在两个方向上以循环方式提供b after a - 所以b+- 更正。

    为了只获得积极的结果,我们还将x标准化。

    【讨论】:

    • 你能解释一下为什么这个程序有效吗?因为读起来有点乱。谢谢。 @MBo
    • 我注意到,由于轮换,我有点困惑。是的,没关系。不过我以为我删除了那条评论。
    猜你喜欢
    • 2015-09-29
    • 2020-02-12
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2019-11-25
    • 1970-01-01
    相关资源
    最近更新 更多