如何计算小时和分针之间的角度?

Cas*_*nes 9 python math clock

我正在努力解决这个问题,但我仍然在努力理解解决这个问题的逻辑.

hour degree = 360 / 12 = 30
minutes degree = 360 / 12 / 60 = 0.5
Run Code Online (Sandbox Code Playgroud)

所以,根据这个,我想我可以在python中制定以下函数:

def clockangles(hour, min):
    return (hour * 30) + (min * 0.5)
Run Code Online (Sandbox Code Playgroud)

对于小时,它工作正常,因为它似乎有1 = 1映射.但是到目前为止,至少有一个问题.当它为0分钟时,分针指向12.

例如:

晚上7点:双手指向晚上7点,指针指向12点

如何正确计算分钟数?请帮我理解配方.

编辑:例如,如果我在晚上7点调用上面的函数,例如clockangles(7,0),我得到值210.但是,根据此链接,7:00的角度为150

roi*_*ppi 20

好的.你试图找到两只手之间的角度.然后这个:

minutes degree = 360 / 12 / 60 = 0.5
Run Code Online (Sandbox Code Playgroud)

只是时针每分钟移动的度数.想一想 - 分针每小时运行360个.因此,完整的革命只有60分钟.分针360/60 =每分钟6度.

所以,你需要找到时针和分针之间的差异.因此,该功能现在看起来像:

def clockangles(hour, minute):
    return (hour * 30 + minute * 0.5) - (minute * 6)
Run Code Online (Sandbox Code Playgroud)

现在,这是有效的,所以我们可以在这里停下来.但是我应该解释一下,这可以给出大于180度和负角度的两个答案.如果您不想要那些东西(并且从您的评论中看起来不是这样),请更正它们.

def clockangles(hour, minute):
    return abs((hour * 30 + minute * 0.5) - (minute * 6))
Run Code Online (Sandbox Code Playgroud)

现在,没有消极的角度.

def clockangles(hour, minute):
    ans = abs((hour * 30 + minute * 0.5) - (minute * 6))
    return min(360-ans,ans)
Run Code Online (Sandbox Code Playgroud)

现在,通过顺时针和逆时针测量形成的两个角度中的较短者.