我正在努力解决这个问题,但我仍在努力理解解决这个问题的逻辑。
hour degree = 360 / 12 = 30
minutes degree = 360 / 12 / 60 = 0.5
所以,根据这个,我想我可以在python中制定以下函数:
def clockangles(hour, min):
return (hour * 30) + (min * 0.5)
对于小时,它工作正常,因为它似乎有1 = 1映射。但是到目前为止,至少有一个问题。当它是0分钟时,分针指向12。
例如:
晚上7点:双手指向下午7点,指针指向12
如何正确计算分钟数?请帮我理解配方。
编辑:例如,如果我在晚上7点调用上面的函数,例如clockangles(7,0),我得到值210.但是,根据this link 7的角度: 00是150
答案 0 :(得分:19)
好。你试图找到两只手之间的角度。然后这个:
minutes degree = 360 / 12 / 60 = 0.5
只是小时手每分钟移动的度数。想一想 - 分针每小时运行360个。因此,完整的革命只有60分钟。分钟360/60 =每分钟6度。
所以,你需要找到时针和分针之间的差异。因此,该功能现在看起来像:
def clockangles(hour, minute):
return (hour * 30 + minute * 0.5) - (minute * 6)
现在,这是有效的,所以我们可以在这里停下来。但是我应该解释一下,这可以给出大于180度和负角度的两个答案。如果您不想要那些东西(并且从您的评论中看起来不是这样),请更正它们。
def clockangles(hour, minute):
return abs((hour * 30 + minute * 0.5) - (minute * 6))
现在,没有消极的角度。
def clockangles(hour, minute):
ans = abs((hour * 30 + minute * 0.5) - (minute * 6))
return min(360-ans,ans)
现在,通过顺时针和逆时针测量形成的两个角度中较短的一个。
答案 1 :(得分:1)
如果你想一想,这并不是那么困难。让我们先考虑每只手的隔离。时钟的分针在60分钟内旋转360度,因此每分钟代表6度。时钟的时针在12小时内旋转360度,因此我们知道它在每小时后总共移动30度,但您需要考虑小时之间的时间推进。即在3:30分钟指针处于6,小时指针已经超过3.我们可以简单地通过(分钟/ 60)* 30度计算这个进步,这相当于分钟/ 2。因此,一旦我们知道每只手的度数,我们就能找到差异。公式就像
degrees = Math.Abs(((hour*30.0 + minute/2.0) - minute*6.0) % 360)
答案 2 :(得分:1)
使用算法:
1.Minute angle = 360 *分钟/ 60
2.Hh angle = [360 *(小时%12)/ 12] + [360 *(分钟/ 60)*(1/12)]
3.小时和分钟之间的角度 =(小时角 - 分钟角)%360
此将减少到 30 *小时 - 5.5 *分钟。
答案 3 :(得分:1)
将小时数乘以60即可将其转换为分钟数。 小时* 60 =分
现在添加给定的分钟数和转换的分钟数。
给定分钟+转换的分钟数=总分钟数
现在将总分钟数除以2,即找出其平均值。 总分/ 2
现在将给定的分钟乘以6。 给出分钟* 6
现在从第4点减去第3点。
通过这种方法,您将获得准确的答案。
答案 4 :(得分:1)
在以下解决方案中,变量 m 指的是分钟,变量 h 指的是小时。
让我们将问题分解为其组件。
现在,让我们开始解决每个组件。
(m / 60)
获得分针周期的完成百分比。由于有360度,我们可以从12点到(m / 60) * 360
得到分针的角度。 时针每12小时完成一次。由于一天24小时,我们需要将小时值标准化为12小时。这是由(h % 12)
完成的,它返回剩余的小时值除以12。
现在,当分针进行循环时,时针不会保持在(h % 12)
的确切值。实际上,它在(h % 12)
和(h % 12) + 1
之间移动了30度。小时针偏离(h % 12)
的金额可以通过将(h % 12)
分钟的周期的完整百分比加(m / 60)
来计算。总的来说,这给了我们(h % 12) + (m / 60)
。
现在我们确定了时针的确切位置,我们需要得到时针周期的完整百分比,我们可以通过((h % 12) + (m / 60)) / 12
获得。由于有360度,我们可以从12点到(((h % 12) + (m / 60)) / 12) * 360
得到时针的角度。
现在我们从12点开始都有分钟和时针的角度,我们只需要找到两个值之间的差异,然后取绝对值(因为差异可能是负数) 。
总的来说,我们有abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360)
。
下面是一个计算此值的python函数。它将返回最短角度的任何值。
def find_angle(h, m):
if abs(((((m/60)+(h%12))/12)-(m/60))*360) > 180:
return 360 - abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360)
return abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360)
答案 5 :(得分:0)
我已经解决了这个问题并创建了一个等式:
(hr*30)+(min/2)-(min*6)
或
(min*6)-(hr*30)-(min/2)
答案 6 :(得分:0)
h = int(input())
m = int(input())
angle = float(abs(11 /2 * m - 30 * h))
print(" {}:{} makes the following angle {}°".format(h, m, angle))
答案 7 :(得分:0)
注意:
60分钟= 360deg
1分钟= 6deg
<强>例如: - 强>
将时间视为 2:20 (即2小时20分钟)
abs((2hr * 5)min - (20)min)= 10min
angle_1 = 10min x 6deg = 60deg
angle_2 = 360deg - 60deg = 300deg(表示另一侧的角度)
因此,在两个角度中,angle_1很小。
因此, min_angle = 60deg
<Window .... d:DataContext="{d:DesignInstance Type={x:Type vm:MainWindowViewModel}, IsDesignTimeCreatable=False}">
答案 8 :(得分:-1)
def clock_angle(time):
constH = 360 / 12
constM = 360 / 60
if ":" in time:
clock = time.split(":")
c1 = int(clock[0])
c2 = int(clock[1])
if c1 >= 12:
c1 -= 12
rc1 = c1*constH + constH*(c2/60)
rc2 = c2*constM
if rc1 > rc2:
result = (rc1-rc2)
angle2 = 360-rc1+rc2
else:
result = (rc2-rc1)
angle2 = 360-rc2+rc1
if angle2 < result:
result = angle2
return result
return 0