Колесо Решений
Пусть колесо решит за вас, прощайте нерешительность
Пока нет записей — крутите колесо!
Что такое Колесо Решений?
Колесо решений случайно выбирает один вариант из списка и превращает небольшой выбор в наглядный общий процесс. Оно подходит для занятий, командных активностей, выбора еды, порядка презентаций, легких розыгрышей, brainstorming и ситуаций, где несколько вариантов примерно равноценны. Польза в снижении усталости от выбора и прозрачности процесса. Но колесо не заменяет суждение, если варианты имеют разные риски, стоимость, правила справедливости или ответственность. Для серьезных розыгрышей список участников, веса, исключения и фиксация результата должны быть определены заранее. Инструмент лучше использовать для низкорисковых решений, где случайность приемлема. При совместном использовании нужно заранее прояснить входные данные, допущения и ожидаемый результат, чтобы вывод не поняли неверно.
Как использовать
Как использовать
- Введите название варианта в поле ввода и нажмите Enter или «Добавить»
- Добавьте до 15 вариантов, каждый — не длиннее 20 символов
- Нажмите центральную кнопку «SPIN» — колесо начнёт вращаться
- Дождитесь остановки колеса и увидите случайно выбранный вариант
Советы по честности
- Делайте варианты короткими и сопоставимыми, чтобы колесо было удобно прочесть всем перед вращением.
- Для важных решений согласуйте список вариантов заранее и не меняйте записи после неудачного результата.
Применение
Технический принцип
Колесо — это рисунок Canvas 2D, совмещённый с детерминированным случайным выбором. Каждый сектор отрисовывается через ctx.beginPath(); ctx.moveTo(cx, cy); ctx.arc(cx, cy, r, startAngle, endAngle); ctx.fill(), где N равных вариантов занимают по 2π/N радиан каждый — для пятнадцати секторов это по 24° дуги, поэтому входные данные ограничены 15 вариантами для читаемости меток. Выигрышный сектор определяется ДО анимации: 32-битное беззнаковое целое число генерируется через crypto.getRandomValues(new Uint32Array(1))[0], берётся остаток от деления на N, и это число является ответом. Затем анимация вычисляет целевой угол поворота fullSpins × 2π + (2π − winnerIndex × sliceAngle − sliceAngle/2), чтобы указатель в верхней части холста оказался направлен на центр выбранного сектора, и плавно переходит к нему в requestAnimationFrame с использованием кривой сглаживания, такой как easeOutCubic, f(t) = 1 − (1−t)³, или easeOutBack для небольшого перелёта, имитирующего замедление физического колеса. crypto.getRandomValues — это CSPRNG Web Crypto (определён в спецификации Web Crypto API), инициализируемый из энтропийного пула ОС, поэтому, в отличие от Math.random, выбор не может быть предсказан чтением состояния страницы. Взвешенные варианты строят массив кумулятивных вероятностей длины N и выполняют бинарный поиск по случайному значению за O(log N). Выходные данные полностью визуальные и эфемерные — ничего не записывается, поэтому любую аудиторскую тропу (временную метку, список вариантов, скриншот) необходимо фиксировать внешне до обновления страницы.
- Отрисовка Canvas: каждый сектор — это ctx.arc(cx, cy, r, startAngle, endAngle) с sliceAngle = 2π / N — 15 вариантов дают 24° на сектор, что является практическим пределом читаемости.
- Выбор победителя через crypto.getRandomValues(new Uint32Array(1))[0] % N — CSPRNG Web Crypto, инициализируемый энтропией ОС, подходит для честных одноразовых розыгрышей, но НЕ для воспроизводимых лотерей (нет аудит-трейла).
- Анимация выполняется в requestAnimationFrame с частотой обновления дисплея (обычно 60 Гц) с easeOutCubic f(t) = 1 − (1−t)³ или easeOutBack для лёгкого перелёта — кривая декоративна, победитель уже выбран.
- Конечный угол поворота: targetRotation = fullSpins × 2π + (2π − winnerIndex × sliceAngle − sliceAngle/2), чтобы верхний указатель попал на центр сектора, а не на его край.
- Режим взвешенных вариантов строит массив префиксных сумм весов и использует бинарный поиск для отображения равномерного случайного числа на сектор за O(log N) — эквивалент обратного CDF-сэмплирования.
- Смещение по модулю пренебрежимо мало при N ≤ 15 и диапазоне выборки 2³² значений (смещение ≈ N / (2 × 2³²) ≈ 1,7×10⁻⁹), поэтому цикл отбраковки не требуется.
- Каждое вращение независимо и одинаково распределено — последовательные вращения могут повторить один и тот же вариант, и это корректное равномерное поведение, а не ошибка; дедупликация между вращениями требует внешней записи.
Примеры
Выбор обеда
Варианты: Pizza, Sushi, Burgers, Tacos, Salad → Крутить → Результат: SushiКомандное мероприятие
Варианты: Bowling, Karaoke, Escape Room, Mini Golf → Крутить → Результат: Escape RoomКиновечер
Варианты: Action, Comedy, Horror, Romance, Sci-Fi → Крутить → Результат: ComedyЧасто задаваемые вопросы
Действительно ли вращение колеса случайное?
Да. Выбранный сегмент определяется через crypto.getRandomValues, после чего колесо анимированно останавливается на нём. Визуальное вращение — лишь театральный приём, результат решается заранее. Каждое вращение независимо от предыдущих.
Все ли сегменты равновероятны?
Да. Каждый вариант получает сегмент одинакового размера, и у каждого сегмента одинаковая вероятность. Режима со взвешенными или смещёнными вероятностями нет — у всех вариантов одинаковый шанс быть выбранными.
Влияет ли анимация вращения на результат?
Нет. Анимация — декоративная: сначала вычисляется результат, а затем колесо поворачивается, чтобы его показать. Даже если остановить анимацию досрочно, выбранный сегмент останется тем же.
Можно ли сохранить колесо между сессиями?
Нет. Варианты сохраняются только в текущей сессии. При закрытии вкладки или обновлении страницы список теряется. Скопируйте варианты перед закрытием, если хотите использовать их повторно.
Стоит ли использовать его для важных решений?
Используйте для маловажных групповых выборов (обед, очерёдность выступлений, жеребьёвка), где любой вариант приемлем, а видимая случайность снимает обиды. Не делегируйте колесу решения, где последствия вариантов сильно различаются — оно не умеет взвешивать компромиссы.
Почему иногда подряд выпадает один и тот же вариант?
Каждое вращение независимо. При трёх вариантах вероятность двух одинаковых исходов подряд — 1/3 ≈ 33%. При десяти вариантах — 10%. Повторы кажутся странными, но математически ожидаемы при настоящем случайном выборе.
Загружается ли мой список вариантов?
Нет. Колесо работает полностью в вашем браузере. Варианты сохраняются локально, если вы это включите; ничего не передаётся.