ToolAct工具行动

决策轮盘

让轮盘帮你做选择,告别选择困难症

选项列表8/15
🍕 吃火锅
🎮 打游戏
📺 追剧
📚 看书
🚶 散步
🛌 睡觉
🎵 听音乐
🧹 做家务
中奖记录

暂无记录,转盘转起来吧

什么是决策轮盘?

决策转盘会从输入列表中随机选择一个选项,把小型选择变成可见、共享的过程。它适合课堂活动、团队互动、吃什么、演示顺序、轻量抽奖、头脑风暴,以及多个选项都差不多可接受的场景。它的价值在于减少选择疲劳,让抽选过程更透明。但当选项之间存在不同风险、成本、公平规则或责任时,转盘不能替代判断。用于正式抽奖时,应提前明确参与名单、权重、排除条件和记录方式,保证结果可解释。它最适合低风险、大家都接受随机性的决定。

使用方法

使用方法

  1. 在输入框中输入选项名称,按回车或点击添加
  2. 添加多个选项(最多15个),每个选项最多20个字符
  3. 点击中央「旋转」按钮,转盘开始旋转
  4. 等待转盘停止,查看随机选中的结果

公平性提示

  • 选项应简短且长度相近,方便旋转前所有人都能看清。
  • 重要决策时,请先确定选项列表再旋转,避免看到不利结果后更改选项。

使用场景

转动可见的转盘做群体决策逐个添加选项,按 Enter 快速添加,当课堂、会议、直播或家庭决策需要透明的随机选择时转动画布转盘。结果在动画开始前通过 crypto.getRandomValues 选定,因此缓动曲线是装饰性的,离线重放相同种子会落在同一扇区。可用此特性在正式使用前脚本化一次可重现的练习轮。
保持选项列表足够短以便阅读转盘限制最多 15 个条目并在扇区上截断过长文本,因此更适合名字、任务、主题、奖励、家务或简短的餐厅选择而非长篇描述。两个条目时转盘功能上等同于抛硬币,而十五个扇区每个仅覆盖 24 度弧,超过几个词的标签很难阅读。保持选项简短,让观众在转盘旋转时也能看清。
在不相关的决策之间重置新一轮开始前使用重置或重新加载默认选项,避免旧条目、颜色、旋转和上次结果混淆下一次选择。每次旋转从剩余扇区集合中独立同分布地抽取结果,因此连续抽中完全可能重复,这是正确的均匀行为而非 bug。在公开使用前定义好参与者名单和规则,因为转盘不记录历史中奖者。
用颜色编码扇区让直播中的结果可读为演示、课堂或直播场景分配对比鲜明的扇区颜色,让观众无需猜测截断标签就能看清转盘停在哪个选项上。交替使用明亮和柔和的扇区也有助于最终停止位置在转盘减速后突出显示,将最亮的颜色与最容易误读的标签配对可以在错误发生前消除一类屏幕显示问题。在观众实际看到的屏幕尺寸上测试布局,因为移动端直播经常会裁剪转盘边缘。
抽奖或转盘活动前记录规则涉及真实奖品、排班分配或参与者筛选时,在转动前写下参与名单、排除条件和日期,以便事后解释结果。记录选项列表、转动时间戳和停止扇区的截图,因为转盘本身不存储审计日志,日后重建相同列表也无法重现同一转动。当第二天有人问「为什么抽到这个名字」时,将截图作为凭据。

技术原理

转盘是基于 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)——等价于逆 CDF 采样。
  • 模偏差在 N ≤ 15 且抽取范围为 2³² 时可以忽略(偏差 ≈ N / (2 × 2³²) ≈ 1.7×10⁻⁹),因此无需拒绝采样循环。
  • 每次旋转是独立同分布的——连续旋转可以重复同一选项,这是正确的均匀行为而非 bug;跨旋转去重需要外部记录。

示例

决定午饭吃什么

选项: 披萨、寿司、汉堡、玉米卷、沙拉 → 转动 → 结果: 寿司

团建活动

选项: 保龄球、KTV、密室逃脱、迷你高尔夫 → 转动 → 结果: 密室逃脱

电影之夜

选项: 动作、喜剧、恐怖、爱情、科幻 → 转动 → 结果: 喜剧

常见问题

转盘真的是随机的吗?

是的。中选扇区由 crypto.getRandomValues 选出,再让转盘动画停在该位置。视觉上的旋转只是表演——结果其实早已确定。每次旋转都互相独立。

每个扇区的概率相同吗?

相同。每个选项占据等大的扇区,每个扇区被选中的概率也相同。本工具不提供加权或带偏好的模式,所有选项机会均等。

旋转动画会影响结果吗?

不会。动画只是装饰——结果先算出来,再让转盘转到对应位置。即使你提前停止动画,被选中的扇区也不会变。

下次访问时还能保留转盘配置吗?

不能。选项仅在当前会话中保留。关闭标签页或刷新页面后会丢失。如需复用,请在关闭前自行复制保存。

适合用来做重要决策吗?

适合用于低风险的群体抉择(午餐吃什么、演讲顺序、选秀次序等)——任何选项都能接受、且公开的随机性能避免争执。如果不同选项的后果差距很大,就不该交给转盘——它无法权衡利弊。

为什么有时连续两次选到同一个选项?

每次旋转都互相独立。三个选项时,连续两次选中同一项的概率是 1/3 ≈ 33%;十个选项时是 10%。重复看起来奇怪,但在真正的随机抽选中是数学上预期的现象。

我的选项列表会被上传吗?

不会。转盘完全在浏览器中运行。如选择保存,仅会存到本地,不会传输任何数据。