我想重写我的答案以更好地解释回答问题。我的公式使用 EXCEL,单位使用度数。
为简单起见,B
是两个值中的较大者,并且A
是两个值中的较小者。您可以稍后在您的解决方案中分别使用MAX()
和。MIN()
第 1 部分 - 走哪条路?
我们首先要做的是确定我们想要执行计算的方向,顺时针或逆时针。我们为此使用IF()
声明:
IF( (B-A)<=180, (Clockwise_Formula), (AntiClockwise_Formula) )
上面的公式检查逆时针从B
to A
(与顺时针从A
to相同B
)是否小于或等于 180 度。如果不是,则往另一个方向走会更短。
要检查这个是否有效:90 - 45 = 45(小于或等于 180)使 IF 语句为 TRUE,因此顺时针方向更短,但 315 - 45 = 270(大于 180)使 if 语句FALSE,所以逆时针公式会更短。
第 2 部分 - 顺时针公式
现在您想在和N
之间插入时间,无论是顺时针还是逆时针。顺时针公式比较简单。A
B
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 度角。我能想到的最简单的方法是将 360 添加到A
,然后使用该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 度吗?这就是将您的 Antiitarian_formula 包装在一个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 部分的解释)