Objective: Find the Angle between hour hand and minute hand at the given time.
Example:
Time : 12:45 Input : hour = 12, Minute = 45 Output : 112.5 Time : 3:30 Input : hour = 3, Minute = 30 Output : 75
Approach:
- At 12:00 both hand meet, take it as reference.
- Angle between hand and minute = angle of hour hand ~ angle of minute hand.
- return minimum(angle, 360-angle)
- hour hand moves 360 in 12 hours => 360/12 = 30 degree in one hour or 0.5 degree in 1 min
- Minute hand moves 360 in 60 mins => 360/60 = 6 degree in one min
- So if given time is h hours and m mins, hour hand will move (h*60+m)*0.5 and minute hand will move 6*m
Code:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class AngleHourMinute { | |
public static double angle(int hour, int minute) { | |
if (hour < 0 || minute < 0) { | |
return –1; | |
} | |
if (hour == 12) { | |
hour = 0; | |
} | |
if (minute == 60) { | |
minute = 0; | |
hour += 1; | |
} | |
double hourAngle = (hour * 60 + minute) * 0.5; | |
double minAngle = minute * 6; | |
double bwAngle = Math.abs(hourAngle – minAngle); | |
return Math.min(360 – bwAngle, bwAngle); | |
} | |
public static void main(String[] args) { | |
System.out.println(angle(12, 45)); | |
System.out.println(angle(3, 30)); | |
System.out.println(angle(2, 23)); | |
} | |
} |
Output:
112.5 75.0 66.5