使用方法
- 打开页面默认就带示例:数量为 8、种子为 9876543、勾选角度细化,结果区已显示八个带偏移的随机方向,你不需要先输入任何东西。
- 改「生成数量」决定要抽几个方向;改「随机种子」可切换不同的确定序列,相同种子必然得到相同结果。
- 勾选「含角度细化」后,每个方向会再派生一个 0 到 30 度的偏移,让结果更细;取消勾选则只给纯方位词。
- 在输入框里按回车也能立即重算;点「复制结果」把整串方向复制到剪贴板。
- 下方对照表列出八方位基准角度与固定种子的示例输出,点「加载更多」展开,可导出 CSV 或复制 TSV。
- 本页不联网、不写本地存储,刷新即回到默认示例,所有计算都在你自己的浏览器里完成,输入内容不会离开设备。
这个 随机方向生成器能解决什么
很多场景需要一个「看起来随机、但又能复现」的方向结果:桌游里掷骰决定行进方位、教学演示伪随机、抽奖或分组时随机分配朝向,都希望能当场给出方向又能在事后复核。这个随机方向生成器用固定种子算法解决的就是「可复核的随机」这一需求。
第一类用途是游戏与桌游。跑团、战棋或户外定向游戏常要随机决定下一步朝向,用本工具给定种子,主持人公布种子后玩家可以自己复算,确保没有暗箱操作,公信力更强。
第二类用途是教学与算法演示。讲线性同余、伪随机序列时,八方位抽取是一个直观的例子;本工具把每一步的取模与取整都写清楚,学生能对照手算理解同一个种子如何稳定地产出序列。
第三类用途是随机决策与头脑风暴。当团队要随机选一个方向做发散讨论、或做随机漫游练习时,本工具一键给出方向,省去翻硬币或抽签的麻烦,且结果可记录种子反复使用。
第四类用途是原型与占位数据。开发地图、罗盘类应用时,先用本工具批量造一批确定性的随机方向做界面联调,比手写死数据更省事,上线前再换成真实逻辑即可。配合下方对照表的固定种子示例,你可以把联调用的方向序列固定下来,方便回归测试时反复使用,而不必每次都重新随机,保证前后两次界面表现一致。
需要强调的是,随机方向生成器 的所有抽取都在本地完成,不联网也不上传。你可以把种子和结果放心分享给别人复核,过程中没有任何数据离开你的设备。
原理和变量
本工具采用线性同余式的简化版做伪随机:每一轮先把种子更新为 s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff,再把得到的 s 除以 2147483647 乘上方位数 8 并向下取整,得到 0 到 7 的下标去取方位词。含角度细化时,再走一轮同样的更新,把新 s 除以最大值乘 31 取整,得到 0 到 30 的偏移度数。因为每一步只依赖前一步的 s,所以给定初始种子,整个序列完全确定。
八方位词库固定为北、东北、东、东南、南、西南、西、西北,按顺时针排列,下标 0 到 7 依次对应。下面变量表说明各环节含义,方便你理解方向是怎么抽出来的。
| 变量 | 含义 | 说明 |
|---|---|---|
| seed | 随机种子 | 初始整数,决定整条序列 |
| s | 当前状态 | 每轮线性同余更新 |
| idx | 方位下标 | floor(s/MAX*8),0 到 7 |
| off | 角度偏移 | floor(s/MAX*31),0 到 30 |
| words | 方位词库 | 八个方位按顺时针排列 |
完整示例
下面这组示例全部由页面算法原样得出,可直接对照你的手算。种子 9876543、数量 8、含角度细化:第一轮 s 更新后取模得下标 1,对应「东北」,再更新一轮取偏移得 1,于是第一行「东北(偏移 1°)」;第二轮得「北(偏移 15°)」,第三轮得「南(偏移 26°)」,依次类推得到八行结果,与上方结果区、下方对照表完全自洽。
如果你想验证手算,把种子代入 s=(s*1103515245+12345)&0x7fffffff,再算 floor(s/2147483647*8) 取方位,勾选细化时再走一轮算 floor(s/2147483647*31) 取偏移,逐步做完必然和本工具一致。这套方法是你在不支持本页的环境里手动复现结果的可靠办法。
数量=8 种子=9876543
含角度细化=是
东北(偏移 1°)
北(偏移 15°)
南(偏移 26°)
… 共 8 行
s=(s*1103515245+12345)&0x7fffffff
idx=floor(s/MAX*8)
方位基准与种子示例对照表
下表列出八方位的基准角度,以及固定种子 9876543 前六次抽取的方向与偏移(前 12 行直接展示,点「加载更多」展开剩余项)。表里所有数据都由本页同一算法得出,方便你对照手算与复核。
| 项目 | 方位 | 角度(度) | 说明 |
|---|---|---|---|
| 基准方位 | 北 | 0 | 正北基准 |
| 基准方位 | 东北 | 45 | 北偏东 |
| 基准方位 | 东 | 90 | 正东基准 |
| 基准方位 | 东南 | 135 | 东偏南 |
| 基准方位 | 南 | 180 | 正南基准 |
| 基准方位 | 西南 | 225 | 南偏西 |
| 基准方位 | 西 | 270 | 正西基准 |
| 基准方位 | 西北 | 315 | 西偏北 |
| 种子示例 | 东北(偏移 1°) | 1 | 种子 9876543 第 1 次 |
| 种子示例 | 北(偏移 15°) | 15 | 第 2 次 |
| 种子示例 | 南(偏移 26°) | 26 | 第 3 次 |
| 种子示例 | 西(偏移 16°) | 16 | 第 4 次 |
| 种子示例 | 南(偏移 23°) | 23 | 第 5 次 |
| 种子示例 | 西南(偏移 4°) | 4 | 第 6 次 |
结果边界与错误提示
- 生成数量为空或非数字时,提示「数量不合法:请输入 1 到 200 之间的整数」,不会静默生成一串乱方向。
- 生成数量超过 200 时,提示「数量不合法:请输入 1 到 200 之间的整数」,避免一次输出过长难以阅读。
- 随机种子为空、负数或非整数时,提示「种子不合法:请输入非负整数」,保证序列可被复算。
- 结果区与错误区都带 role="alert" 语义,内容一变就会被屏幕阅读器播报;所有抽取本地完成,不联网也不写存储,刷新即还原默认示例。
- 同一种子多次运行必然得到完全相同的序列,这是固定种子算法的特性,不是 bug,便于分享与复核。
- CSV 导出在文件头写入 UTF-8 BOM(\ufeff),Excel 打开中文不会乱码;TSV 复制是纯制表符分隔文本,粘进任意表格软件都会自动分列。
- 角度偏移范围是 0 到 30 度(含 0 与 30),若你看到偏移为 0 属正常,说明该次派生值恰好落在下限。
- 本工具只做方向抽取,不对结果做排序或去重;如需不重复的方向,可增大数量或更换种子后自行筛选。
常见问题
为什么同一个种子每次结果都一样?
因为本工具使用固定种子的线性同余算法,序列完全由初始种子决定,所以相同种子必然产出相同方向。这正是「可复核随机」的设计目的,方便你分享种子让别人验证。
角度偏移是怎么算出来的?
在勾选细化后,算法再走一轮同样的种子更新,把新状态除以最大值乘 31 并向下取整,得到 0 到 30 的偏移度数,附加到方位词后面,让结果更细腻。
能不能只生成纯方位不要偏移?
可以。取消勾选「含角度细化」,每个方向就只输出北、东北、东这类纯方位词,不再附加角度,输出更简洁。
eight 个方位的顺序是什么?
词库按顺时针固定为北、东北、东、东南、南、西南、西、西北,下标 0 到 7 依次对应,算法只是从中按下标抽取,不改动这个顺序。
导出的 CSV 为什么带 BOM?
因为 Excel 打开无 BOM 的 UTF-8 文件时常把中文显示成乱码,BOM 能让 Excel 正确识别编码。TSV 复制走剪贴板不经文件,所以不需要 BOM。
我想换一组不同的方向怎么办?
直接修改「随机种子」为一个新整数再生成即可;种子不同,整条序列就不同。你也可以调大「生成数量」一次性拿更多方向。
我的种子和结果会上传吗?
不会。所有抽取计算在浏览器本地进行,不联网、不写存储,刷新即还原默认示例,没有任何数据离开你的设备,可以放心使用。
为什么结果区和示例不一致?
请确认种子、数量与是否勾选角度细化都和示例一致;任一不同都会得到不同的序列。保持参数一致后点「生成方向」,结果必然与手算一致。