ToolAct工具行動

決策輪盤

讓輪盤幫你做選擇,告別選擇困難症

選項列表8/15
🍕 吃火锅
🎮 打游戏
📺 追剧
📚 看书
🚶 散步
🛌 睡觉
🎵 听音乐
🧹 做家务
中獎記錄

暫無記錄,轉盤轉起來吧

什麼是決策輪盤?

決策轉盤會從輸入列表中隨機選擇一個選項,把小型選擇變成可見、共享的過程。它適合課堂活動、團隊互動、吃什麼、簡報順序、輕量抽獎、腦力激盪,以及多個選項都差不多可接受的情境。它的價值在於減少選擇疲勞,讓抽選過程更透明。但當選項之間存在不同風險、成本、公平規則或責任時,轉盤不能取代判斷。用於正式抽獎時,應提前明確參與名單、權重、排除條件和記錄方式,保證結果可解釋。它最適合低風險、大家都接受隨機性的決定。

使用方法

使用說明

  1. 在輸入框中輸入選項名稱,按 Enter 或點選「加入」
  2. 新增多個選項(最多 15 個),每個選項以 20 個字元為限
  3. 點選中央的「旋轉」按鈕,轉盤隨即開始轉動
  4. 待轉盤停止後,查看隨機選出的結果

公平性提示

  • 選項請保持簡短且長度相近,讓參與者在轉盤啟動前都能清楚辨識。
  • 面對重要決策,請在旋轉前先確認選項清單,並避免在看到不理想的結果後再行更改。

使用場景

為群體選擇轉動可見的輪盤逐一加入選項,按 Enter 快速新增,當課堂、會議、直播或家庭決定需要透明的隨機選擇時,轉動 Canvas 輪盤。結果在動畫開始前就已透過 crypto.getRandomValues 決定,因此緩動曲線是裝飾性的,離線重播相同種子會落在相同的區塊。可用這個特性在正式上線前排練一次可重現的練習回合。
保持選項清單簡短以便閱讀輪盤限制最多 15 個項目並在區塊上截斷過長文字,因此它更適合名字、任務、主題、獎勵、家務或簡短的餐廳選擇,而非長篇描述。只有兩個項目時輪盤功能上等同於拋硬幣,而十五個區塊每個只佔 24 度弧,標籤超過幾個詞就難以辨識。保持選項簡短,讓觀眾在轉動時也能清楚閱讀。
在不相關的決定之間重置在新一輪之前使用重置或重新載入預設選項,避免舊項目、顏色、旋轉角度和上次結果混淆下一次選擇。每次旋轉從剩餘區塊集合中抽取獨立同分佈的結果,因此連續選中同一個選項完全可以發生,這是正確的均勻行為而非錯誤。用於任何公開場合之前,請先定義參與名單和規則,因為輪盤不會記錄過去的中獎者。
為區塊配色讓直播結果清晰可讀為簡報、課堂或直播場景分配對比鮮明的區塊顏色,讓觀眾不必猜測截斷的標籤就能看出輪盤停在哪個選項上。交替使用明亮和柔和的色塊也能在輪盤減速時讓最終停靠位置更醒目,將最亮的顏色搭配最容易被誤讀的標籤,可在螢幕錯誤發生之前就消除一類問題。在觀眾實際看到的螢幕尺寸上測試佈局,因為手機直播經常裁切輪盤邊緣。
在抽獎或摸彩前記錄規則當涉及真正的獎品、排班指派或參與者篩選時,在轉動前寫下名單、排除條件和日期,以便事後解釋結果。擷取選項清單、旋轉時間戳和停靠區塊的截圖,因為輪盤本身不會儲存審計記錄,事後重建相同清單也不會重現相同的轉動。當隔天出現「為什麼選中這個名字」的疑問時,將截圖視為收據。

技術原理

輪盤是以 Canvas 2D 繪製,搭配確定性隨機選取。每個區塊以 ctx.beginPath(); ctx.moveTo(cx, cy); ctx.arc(cx, cy, r, startAngle, endAngle); ctx.fill() 繪製,其中 N 個等分選項各佔 2π/N 弧度——十五個區塊即每個 24 度弧,這也是輸入上限為 15 的原因,以保持標籤可讀性。中獎區塊在動畫開始前就已決定:透過 crypto.getRandomValues(new Uint32Array(1))[0] 產生 32 位元無符號整數,取模 N 後即為答案。動畫計算目標旋轉角度為 fullSpins × 2π + (2π − winnerIndex × sliceAngle − sliceAngle/2),使畫布頂部的指標最終指向所選區塊的中心,並在 requestAnimationFrame 中使用緩動曲線(如 easeOutCubic f(t) = 1 − (1−t)³ 或 easeOutBack 產生輕微超調以模擬物理輪盤減速)來補間。crypto.getRandomValues 是 Web Crypto CSPRNG(於 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——Web Crypto CSPRNG,以作業系統熵為種子,適用於公平的單次抽選,但不適用於可重播的抽獎(無稽核軌跡)。
  • 動畫在 requestAnimationFrame 中以顯示重新整理率(通常 60 Hz)執行,使用 easeOutCubic f(t) = 1 − (1−t)³ 或 easeOutBack 產生輕微超調——曲線為裝飾性,中獎者已預先決定。
  • 最終旋轉角度為 targetRotation = fullSpins × 2π + (2π − winnerIndex × sliceAngle − sliceAngle/2),使頂部指標落在區塊中心而非邊緣。
  • 加權選項模式建立權重的前綴和陣列,並使用二元搜尋將均勻隨機數映射到區塊,時間複雜度 O(log N)——等同於反累積分布函數取樣。
  • 當 N ≤ 15 且抽樣範圍為 2³² 時,模偏差可忽略不計(偏差約 N / (2 × 2³²) ≈ 1.7×10⁻⁹),因此無需拒絕取樣迴圈。
  • 每次旋轉為獨立同分佈——連續旋轉可重複相同選項,這是正確的均勻行為而非錯誤;跨旋轉去重需要外部記錄。

範例

決定午餐

選項:披薩、壽司、漢堡、墨西哥捲、沙拉 → 旋轉 → 結果:壽司

團隊活動

選項:保齡球、卡拉 OK、密室逃脫、迷你高爾夫 → 旋轉 → 結果:密室逃脫

電影之夜

選項:動作、喜劇、恐怖、愛情、科幻 → 旋轉 → 結果:喜劇

常見問題

轉盤旋轉真的是隨機的嗎?

是的。被選中的扇區是由 crypto.getRandomValues 決定後,再讓轉盤動畫停在那一格。視覺上的旋轉只是表演 — 結果其實事先就決定好了。每次旋轉都與前一次無關。

所有扇區的機率都一樣嗎?

是的。每個選項取得相同大小的扇區,每個扇區機率相等。沒有加權或偏向模式 — 所有選項被選中的機率完全相同。

旋轉動畫會影響結果嗎?

不會。動畫只是裝飾 — 結果會先計算出來,轉盤再旋轉到該位置。即使你提前停止動畫,被選中的扇區仍是同一個。

可以跨工作階段儲存轉盤設定嗎?

不行。選項只在目前工作階段儲存。關閉分頁或重新整理會遺失清單。如果之後還要用,請在關閉前先複製選項。

我該用它來做重要決定嗎?

建議用在低風險的群體選擇(午餐、上台順序、選秀順位)這類任何選項都可接受、可見的隨機性能避免不愉快的場合。不要把不同選項後果差異很大的決定交給它 — 轉盤無法權衡得失。

為什麼有時候會連續兩次選到同一個選項?

每次旋轉都是獨立的。三個選項時,連續兩次選到同一個的機率為 1/3 ≈ 33%。十個選項時為 10%。重複看起來奇怪,但對真正的隨機選取而言在數學上是預期內的。

我的選項清單會被上傳嗎?

不會。轉盤完全在你的瀏覽器中執行。若你選擇儲存,選項會留在本機;不會傳送到伺服器。