Мне недавно дали этот вопрос об интервью:
Учитывая 12-часовые аналоговые часы, вычислите в градусе меньший угол между часом и минутными стрелками. Будьте так точны, как Вы можете.
Я задаюсь вопросом, что является самым простым, большая часть читаемого, самого точного алгоритма. Решение на любом языке приветствуется (но действительно объясните это немного, если Вы думаете, что это необходимо).
Оказывается, в Википедии есть лучший ответ:
// h = 1..12, m = 0..59
static double angle(int h, int m) {
double hAngle = 0.5D * (h * 60 + m);
double mAngle = 6 * m;
double angle = Math.abs(hAngle - mAngle);
angle = Math.min(angle, 360 - angle);
return angle;
}
По сути:
0,5
градусов в минуту6
градусов в минутуПроблема решена.
И точность не волнует, потому что дробная часть равна либо .0
, либо .5
, а в диапазоне 0...360
все эти значения точно представимы в double
.
Не знаю, правильно ли это, .что-то вроде этого?
//m*360/60 - (h*360/24)+(m*360/(24*60)) ->
t = abs(25*m - 60*h)/4
t = min(t,360-t)