将角度映射到 0-1 范围
Map angles to a 0-1 range
假设您有两个角,并将它们标记为 0 和 1。然后您有另一个角 x。你也知道你是顺时针还是逆时针从角度 0 到角度 1。你如何计算一个可以描述第三个角度的数字?
示例:
Angle at 0
Angle at 1
Rotation Direction
Target Angle
Mapped number (x)
0°
90°
CCW
60°
2/3
90°
0°
CW
60°
1/3
0°
180°
CW
90°
1.5
0°
180°
CCW
90°
0.5
我遇到的问题:
- 当 x 不能在 0 和 1 范围内支持时(我很好,只是告诉我它做不到,但有数字会更酷)。
- 从逆时针 (CCW) 切换到 CW 时。
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
。
假设您有两个角,并将它们标记为 0 和 1。然后您有另一个角 x。你也知道你是顺时针还是逆时针从角度 0 到角度 1。你如何计算一个可以描述第三个角度的数字?
示例:
Angle at 0 | Angle at 1 | Rotation Direction | Target Angle | Mapped number (x) |
---|---|---|---|---|
0° | 90° | CCW | 60° | 2/3 |
90° | 0° | CW | 60° | 1/3 |
0° | 180° | CW | 90° | 1.5 |
0° | 180° | CCW | 90° | 0.5 |
我遇到的问题:
- 当 x 不能在 0 和 1 范围内支持时(我很好,只是告诉我它做不到,但有数字会更酷)。
- 从逆时针 (CCW) 切换到 CW 时。
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
。