我想重写我的答案以更好地解释问题的答案。我的公式使用 EXCEL,单位使用度数。
为简单起见,B 是两个值中的较大者,A 是两个值中的较小者。您可以稍后在您的解决方案中分别使用MAX() 和MIN()。
第 1 部分 - 走哪条路?
我们首先要做的是确定我们想要执行计算的方向,顺时针或逆时针。为此,我们使用IF() 声明:
IF( (B-A)<=180, (Clockwise_Formula), (AntiClockwise_Formula) )
上述公式检查从B 到A 的逆时针方向(与从A 到B 的顺时针方向相同)是否小于或等于180 度。如果没有,往另一个方向走会更短。
要检查这个是否有效:90 - 45 = 45(小于或等于 180)使 IF 语句为 TRUE,因此顺时针方向更短,但 315 - 45 = 270(大于 180)使if 语句为 FALSE,所以逆时针公式会更短。
第 2 部分 - 顺时针公式
现在您想在A 和B 之间插入N 次,顺时针或逆时针。顺时针公式比较简单。
Clockwise_Formula: ((B-A)/N*S)+A
其中S 是插值次数的计数,从 1 开始到 N-1 结束(如果是 S = N,您的答案将是 B)
示例:A = 90、B = 270、N = 4
S=1: ((270-90)/4*1)+90 = 135
S=2: ((270-90)/4*2)+90 = 180
S=3: ((270-90)/4*3)+90 = 225
第 3 部分 - 逆时针公式
逆时针公式会稍微复杂一些,因为我们需要逆时针穿越 360 度角。我能想到的最简单的方法是在A 上加上360,然后使用MOD(FORMULA,VALUE) 函数将答案调制360。
您还必须在公式中交换A 和B,因为B 现在是最小的数字。 (这听起来可能有点令人困惑,但它确实有效!)
(Unmodulated) AntiClockwise_Formula: (((A+360)-B)/N*S)+B
示例:A = 60、B = 300、N = 4
S=1: (((60+360)-300)/4*1)+300 = 330
S=2: (((60+360)-300)/4*2)+300 = 360
S=3: (((60+360)-300)/4*3)+300 = 390
第 4 部分 - 将答案限制在 0 和 360 之间
看到有时(但并非总是)答案会大于 360 度吗?这就是在 MOD() 函数中包装您的逆时针公式的地方:
AntiClockwise_Formula: MOD((((A+360)-B)/N*S)+B,360)
修改第 3 部分中使用的示例将为您提供:
S=1: 330
S=2: 0
S=3: 30
第 5 部分 - 将所有内容放在一起
将第 1-4 部分中的所有元素组合在一起,答案是:
IF((B-A)<=180,((B-A)/N*S)+A,MOD((((A+360)-B)/N*S)+B,360))
地点:
A = 两个值中较小的一个(可以将 A 替换为 MIN())
B = 两个值中较大的一个(可以将 B 替换为 MAX())
N = 您要进行的插值次数(例如,2 是一半,3 是三分之一等)
S = 最多为 N-1 的增量计数(请参阅第 2 部分的解释)