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

时间:2013-12-15 23:50:47

标签: python math clock

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

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

9 个答案:

答案 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)

  1. 将小时数乘以60即可将其转换为分钟数。                   小时* 60 =分

  2. 现在添加给定的分钟数和转换的分钟数。

    给定分钟+转换的分钟数=总分钟数

  3. 现在将总分钟数除以2,即找出其平均值。                   总分/ 2

  4. 现在将给定的分钟乘以6。                  给出分钟* 6

  5. 现在从第4点减去第3点。

  6. 通过这种方法,您将获得准确的答案。

答案 4 :(得分:1)

在以下解决方案中,变量 m 指的是分钟,变量 h 指的是小时。

让我们将问题分解为其组件。

  1. 从12点开始查找分针的角度。
  2. 从12点开始查找时针的角度。
  3. 找出差异的绝对值。
  4. 现在,让我们开始解决每个组件。

    1. 分针每小时或60分钟完成一个完整的循环。因此,我们可以通过(m / 60)获得分针周期的完成百分比。由于有360度,我们可以从12点到(m / 60) * 360得到分针的角度。
    2. 时针每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得到时针的角度。

    3. 现在我们从12点开始都有分钟和时针的角度,我们只需要找到两个值之间的差异,然后取绝对值(因为差异可能是负数) 。

      总的来说,我们有abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360)

    4. 下面是一个计算此值的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