Математика программирование и часы

Математика, программирование и часы

Утром поставил будильник на 6:20. Потом я наконец встаю через 10-15 минут. Однако это утро было особенным из-за моих новых часов. Он не особо новый — мне подарили 5 месяцев назад на именины. Однако только вчера я наконец решил попробовать. Я так долго ждал, потому что просто ненавижу часы. Особенно со стрелками.

И сегодня ровно в 6:33 я посмотрел на часы, чтобы посмотреть, не пора ли мне вставать. И я заметил, что часовая и минутная стрелки перекрываются.

Все мы знаем анекдот про мутру, которому подарили часы. Поскольку он не знал его, ему сказали: «Когда обе стрелки указывают вверх — это 12. Когда обе идут вниз — это 6:30». А также большинство из нас знает, что у нас нет реального совпадения в 6:30 и вскоре после этого. Стрелка часа к тому времени тоже сдвинулась..

Однако сколько раз в день и в какие именно часы на самом деле пересекаются две руки.?

Чтобы ответить на этот вопрос, нам сначала нужно составить элементарное математическое уравнение. Затем с помощью языка программирования решим ее с несколькими входными параметрами. Так мы найдем все решения, удовлетворяющие характеристикам часов..

Полное вращение стрелок

Во-первых, начнем с того, что полный круг вращения обеих стрелок составляет 360 градусов..

Отсюда мы можем легко сделать вывод, что 60 минут более длинной стрелки соответствуют каждому повороту на 6 градусов..

В классах делим не на 60, а на 12 и получаем 30 градусов в час. Однако это значение необходимо уточнить. Мы уже упоминали, что вращение часовой стрелки также зависит от минутной стрелки. Итак, к 30 градусам в час мы должны добавить 6 градусов в минуту, но разделить их на 12 — на каждый час..

Читать также:  Начало работы с JavaScript Возможности

Чтобы стрелки перекрывались, угол, на который они повернуты, должен быть равен.

Математическое уравнение

Отсюда следует, что уравнение, которое нам нужно решить, это:

6 * м = 30 * в + (6 * м) / 12

Я отметил минуты буквой m, а часы — буквой h..

В математике, однако, мы узнали, что если у нас есть две переменные, мы должны иметь систему из двух уравнений, чтобы найти одно решение. У нас есть только одно уравнение. В данном случае это означает, что у нас будет бесконечное количество решений.

Учитывая, что часы могут быть только целыми числами от 1 до 12, а минуты — целыми числами от 0 до 59, мы теперь приходим к конечному числу решений, которые удовлетворяют другим требованиям..

Итак, мы с самого начала знали, что таких ситуаций было несколько. Если бы был только один — это было бы 12:00 (например). Но мы знаем, что есть и другие совпадения стрелок. Мы пытаемся найти именно их.

Расчет программы

С помощью компьютера мы легко можем написать скрипт для замены m на любое значение от 0 до 59. Для каждой итерации цикла сделать вложенный, на часы от 1 до 12.

Как бы хорошо компьютеры ни справлялись со многими схожими задачами, написание подобным образом — пустая трата ресурсов..

Однако, чтобы упростить наш алгоритм, мы также должны упростить уравнение.

Получаем:

6 * m = 30 * h + (6 * m) / 12 6 * m = 30 * h + (6/12) * m 6 * m = 30 * h + 0,5 * m 6 * m — 0,5 * m = 30 * h 5,5 * m = 30 * hm = (30 * h) /5,5 м = (30 / 5,5) * hm = (60/11) * h

Читать также:  Глубокие ссылки Часть 2

Представление 30 / 5,5 как 60/11 так же чисто, как отсутствие смешанной печени. Десятичная дробь в качестве знаменателя в обыкновенном ужасно некрасива!

Это называется решением уравнения с двумя неизвестными относительно одной..

Мы предполагаем, что одно неизвестное — это аргумент, который может быть введен с разными значениями. Решая уравнение относительно каждого из этих значений, мы получаем различный результат для m.

Я решил выбрать m вместо h, потому что h может иметь только 12 значений, а не 60 (как m).

Сведение к циклу из 12 итераций

Таким образом, я могу написать сценарий для выполнения простого цикла от 1 до 12. Результатом будут минуты, в которых есть совпадения для каждого из этих часов..

Давайте просто представим его как 0 на 12 часов. Мне при расчетах удобнее будет приравнять 360 градусов к 0.

Отсюда и идет сам программный код. Поскольку последние учебники, которые я написал, посвящены PHP, я напишу его с учетом его синтаксиса. В целом алгоритм настолько прост, что его легко скопировать на другие языки. Вероятно, изменений почти не будет:

функция get_overlapping_minutes ($ h) {return 60/11 * $ h; }
для ($ i = 0; $ i 12; $ i ++) {$ m = get_overlapping_minutes ($ i);
echo "$ i: $ m \ n"; }

Однако, если мы запустим скрипт таким образом, мы получим следующий список часов перекрытия стрелок:

0: 0 1: 5.4545454545455 2: 10.909090909091 3: 16.363636363636 4: 21.818181818182 5: 27.272727272727 6: 32.727272727273 7: 38.181818181818 8: 43.636363636364 9: 49.090909090909 10: 54.545

Давайте сейчас проигнорируем 11:60, это должно быть 12:00 или 0:00..

Другие значения минут совершенно особенные, так как у нас 60/11, и это приводит к бесконечным десятичным дробям. Просто PHP в какой-то момент их завершает.

Читать также:  Подробнее ScrollMagic

И все же почему десятичные значения? Разве мы не говорили на минутку, что это целые числа от 0 до 59? Почему это происходит?

Мы были достаточно точны, чтобы учесть, что поворот часов зависит от минут. Однако мы не заметили, что вращение минутной стрелки в свою очередь зависит от секунд..

Допустимое округление

Чтобы не усложнять ситуацию без надобности, давайте просто округлим минуты до ближайшего целого числа:

функция get_overlapping_minutes ($ ч) {возврат раунда (60/11 * $ ч); }
для ($ i = 0; $ i 12; $ i ++) {$ m = get_overlapping_minutes ($ i);
echo "$ i: $ m \ n"; }

За исключением 11:60 и более приятного форматирования часов, теперь мы получаем список часов и минут, в которых стрелки перекрываются:

00:00 01:05 02:11 03:16 04:22 05:27 06:33 07:38 08:44 09:49 10:55

Мы видим, что их всего 11. Вы ожидали 12, не так ли? По одному на каждый час. Да, но поскольку за один полный оборот минутных стрелок по всему циферблату часы идут на один вперед, на 11-м обороте уже прошло 12 часов, и у нас остается на одну комбинацию меньше.

Случай похож на забавную историю, в которой в «Вокруг света за 80 дней» у главного героя есть 1 день, чтобы завершить свое путешествие, поскольку он движется в направлении, противоположном вращению Земли, и в каждом часовом поясе возвращается. его часы с 1 часом. Таким образом, по окружности всей сферы он на день раньше (с чисто перцептивной точки зрения), чем он осознавал..

Понравилась статья? Поделиться с друзьями:
Что нужно знать пользователю?