web-dev-qa-db-fra.com

Comment calculer l'angle entre les aiguilles des heures et des minutes?

J'essaie de résoudre ce problème, mais je n'arrive toujours pas à comprendre la logique pour le résoudre.

hour degree = 360 / 12 = 30
minutes degree = 360 / 12 / 60 = 0.5

Donc, je pensais pouvoir formuler la fonction suivante en python:

def clockangles(hour, min):
    return (hour * 30) + (min * 0.5)

Pour l'heure, cela fonctionne bien, car il semble y avoir un mappage 1 = 1. Mais pour la minute, il y a au moins un problème. Quand il est 0 minute, l'aiguille des minutes pointe à 12.

Par exemple:

19h: aiguilles indiquant 19h et minutes indiquant 12

Comment calculer les minutes correctement? S'il vous plaît, aidez-moi à comprendre la formule.

EDIT: Par exemple, si j'appelle la fonction ci-dessus à 19h, par exemple les horloges (7,0), je reçois la valeur 210. Toutefois, selon ce lien l'angle à 7:00 est 150

9
CaseyJones

D'accord. Vous essayez de trouver l'angle entre les deux mains. Ensuite ceci:

minutes degree = 360 / 12 / 60 = 0.5

Est-ce juste le nombre de degrés de heure aiguille se déplace par minute. Pensez-y - l'aiguille des minutes parcourt 360 toutes les heures. Par conséquent, il n'y a que 60 minutes dans une révolution complète. 360/60 = 6 degrés par minute pour l'aiguille des minutes.

Donc, vous devez trouver la différence entre les aiguilles des heures et des minutes. Ainsi, la fonction ressemble maintenant à:

def clockangles(hour, minute):
    return (hour * 30 + minute * 0.5) - (minute * 6)

Maintenant, ceci est valide, alors nous pourrions nous arrêter ici. Cependant, je devrais expliquer que cela peut donner à la fois des réponses supérieures à 180 degrés et des angles négatifs. Si vous ne voulez pas ces choses (et d'après vos commentaires, il semble que vous n'en ayez pas), corrigez-les.

def clockangles(hour, minute):
    return abs((hour * 30 + minute * 0.5) - (minute * 6))

Maintenant, pas d'angles négatifs.

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

Maintenant, le plus court des deux angles est formé en mesurant dans le sens horaire et antihoraire.

19
roippi

Ce n'est pas si difficile si vous y réfléchissez. Permet de considérer chaque main séparément. L'aiguille des minutes de l'horloge tourne à 360 degrés en 60 minutes, ainsi chaque minute représente 6 degrés. L'aiguille des heures de l'horloge tourne à 360 degrés en 12 heures. Nous savons donc qu'elle se déplace de 30 degrés au total toutes les heures, mais vous devez tenir compte de l'évolution de l'aiguille des heures entre les heures. c'est-à-dire qu'à 3h30 l'aiguille des minutes est sur 6 et que l'aiguille des heures a dépassé 3. Nous pouvons calculer cet avancement simplement par (minutes/60) * 30 degrés, ce qui équivaut à minutes/2. Donc, une fois que nous connaissons les degrés de chaque main, nous trouvons simplement la différence. Et la formule sera comme 

 degrees = Math.Abs(((hour*30.0 + minute/2.0) - minute*6.0) % 360)
1
Saurabh
  1. Multipliez les heures par 60 qui le convertissent en minutes. heures * 60 = minutes

  2. Ajoutez maintenant les minutes données et les minutes converties. 

    minutes données + minutes converties = minutes totales

  3. Divisez maintenant le nombre total de minutes par 2, c'est-à-dire pour trouver sa moyenne. total de minutes/2

  4. Maintenant, multipliez les minutes données par 6. Les minutes données * 6

  5. Soustrayez maintenant le point 3 du point 4.

Par cette méthode, vous obtiendrez une réponse précise. 

1
Uchit Patel

Dans la solution suivante, la variable m fait référence aux minutes et la variable h aux heures.

Séparons le problème en ses composants. 

  1. Trouvez l'angle de l'aiguille des minutes à partir de 12 heures.
  2. Trouvez l'angle de l'aiguille des heures à partir de 12 heures.
  3. Trouvez la valeur absolue de leur différence.

Maintenant, commençons à résoudre chaque composant.

  1. L'aiguille des minutes fait un cycle complet toutes les heures, soit 60 minutes. Par conséquent, nous pouvons obtenir le pourcentage terminé du cycle de l'aiguille des minutes par (m / 60). Puisqu'il y a 360 degrés, nous pouvons obtenir l'angle de l'aiguille des minutes à partir de 12 heures par (m / 60) * 360
  2. L'aiguille des heures fait un cycle complet toutes les 12 heures. Comme il y a 24 heures dans une journée, nous devons normaliser la valeur de l'heure à 12 heures. Ceci est accompli par (h % 12), qui renvoie le reste de la valeur de l'heure divisé par 12. 

    Maintenant, alors que l'aiguille des minutes effectue son cycle, l'aiguille des heures ne reste pas simplement à la valeur exacte de (h % 12). En fait, il se déplace de 30 degrés entre (h % 12) et (h % 12) + 1. Le montant par lequel l'aiguille des heures s'écarte de (h % 12) peut être calculé en ajoutant à (h % 12) le pourcentage terminé du cycle de l'aiguille des minutes, qui est (m / 60). Globalement, cela nous donne (h % 12) + (m / 60)

    Maintenant que nous avons la position exacte de l’aiguille des heures, nous devons obtenir le pourcentage achevé du cycle de l’aiguille des heures, que nous pouvons obtenir par ((h % 12) + (m / 60)) / 12. Comme il y a 360 degrés, nous pouvons obtenir l'angle de l'aiguille des heures à partir de 12 heures avec (((h % 12) + (m / 60)) / 12) * 360

  3. Maintenant que nous avons l'angle de l'aiguille des minutes et des heures à partir de 12 heures, il suffit de trouver la différence entre les deux valeurs et de prendre la valeur absolue (car la différence peut être négative). 

    Donc dans l’ensemble, nous avons abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360).

Ci-dessous, une fonction python qui calcule cette valeur. La valeur de l'angle le plus court sera renvoyée.

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)
1
Lynn Samson

Utilisez l'algorithme:

1.Angle minimal = 360 * minutes/60

2.Angle heure = [360 * (heure% 12)/12] + [360 * (minutes/60) * (1/12)]

3.Angle heure/minute = (angle heure - angle minute)% 360

this réduit à 30 * heures - 5,5 * minutes .

1
Prateek Joshi
h = int(input())
m = int(input())
angle = float(abs(11 /2 * m - 30 * h))
print(" {}:{} makes the following angle {}°".format(h, m, angle))
0
MIIK7

Remarque :

60min = 360deg

1min = 6deg

Par exemple: - considérons le temps comme 2:20 (soit 2h20)

abs ((2h * 5) min - (20) min) = 10 min 

angle_1 = 10min x 6deg = 60deg 

angle_2 = 360deg - 60deg = 300deg (signifie l'angle de l'autre côté)

Donc, hors des deux angles, angle_1 est petit.

donc, min_angle = 60deg

def min_angle_bet_hr_min(hr, min):

    angle_1 = (hr*5 - min)*6
    angle_2 = 360 - angle_1

    if angle_1 < angle_2:
        min_angle = angle_1
    Elif angle_1 > angle_2:
        min_angle = angle_2
    else:
        min_angle = 0

    return abs(min_angle)
0
Manoj Selvin

J'ai travaillé sur ce problème et créé une équation: 

(hr*30)+(min/2)-(min*6) 

ou 

(min*6)-(hr*30)-(min/2) 
0
Tamim