Repository navigation
UserGuide.LocatePosCommand.zh
English | 简体中文
一个 计算器类命令,用于在 浮点数精度损失情况下,计算并在聊天框中为命令执行者输出一个坐标经过缩放和偏移后的精确对应位置。
- 需要的权限等级:2
- 限制条件:无
在 Ultimate Scaler 的重定位系统中,世界坐标与生成坐标的转换关系为:
生成坐标 = 世界坐标 × 缩放 + 偏移
然而,当偏移足够大时,浮点数精度损失会导致上述映射关系 不再在数学上成立 ——世界坐标乘以缩放的值相对于偏移来说可能太小,无法对生成坐标产生实际影响,导致地形分界线的位置发生偏移。
本命令的核心功能是: 给定一个目标生成坐标,找到满足该生成坐标对应的最小整数世界坐标。这一计算完全基于 BigInteger
的二分法查找,避免了双精度浮点数带来的舍入误差,确保结果是精确的。
适用场景:
- 定位地形特征(如边境之地)在应用缩放和偏移后的精确分界线。
- 验证或预测远距离地形生成的行为。
- 当坐标足够大、精度损失不可忽略时,本命令尤为有用。
命令行为:
此命令等价于在 Java 中求解以下问题:
给定 double(非 Infinity, NaN) 目标值 p,缩放 s,偏移 o,找到唯一的 BigInteger 整数 i,使得:
i.doubleValue() * s + o >= p && i.subtract(BigInteger.ONE).doubleValue() * s + o < p
即: 找到最小的整数坐标 i,使得经过缩放和偏移后的值刚好跨过 p 这条边界线。
注意:
- 关于世界生成重定位功能的完整介绍,请参阅世界生成重定位功能详解。
- 本命令处理的是单轴坐标,而非完整的三维坐标。因为在 Ultimate Scaler 中,每个坐标轴(X、Y、Z)的偏移量和缩放系数完全独立,三者之间不存在任何关联。因此,将计算强制扩展为三元组会引入不必要的冗余和混淆。若需要同时获取多个轴的结果,请分别为各轴单独执行本命令。
- 当启用配置中的高精度模式时,此命令不再必要,因为此时世界坐标可以直接通过公式
(原始坐标 - 偏移) / 缩放精确计算。本命令专为未启用该功能的场景设计。
locate pos <targetPos> <scale> <offset>-
<targetPos>:double- 目标生成坐标(也就是未偏移坐标)
- 必须为有限数值(非 ±∞,非 NaN)
-
<scale>:double- 该轴上的缩放倍率
- 不可为 0,且为有限数值
-
<offset>:double- 该轴上的偏移量
- 必须为有限数值
- 参数未正确指定:无法解析
- 任意参数为非有限值:执行失败
-
<scale>为 0:执行失败 - 不符合以上所有条件:执行成功
| 条件 | 成功次数 | /execute store success ... |
/execute store result ... |
|---|---|---|---|
| 失败 | 0 | 0 | 0 |
| 成功 | 1 | 1 | 找到的坐标(被钳制在 int 范围内) |
场景: 已知在无缩放、无偏移时,边境之地的分界线(开始生成的位置)位于坐标 1808764368955220359643137。现想探究:当 X 轴缩放为
8,偏移量也为 1808764368955220359643137 时,该分界线在缩放后的世界坐标上位于何处。
命令:
/locate pos 1808764368955220359643137 8 1808764368955220359643137
输出:
找到坐标:-16777215
这意味着,经过缩放和偏移后,边境之地的分界线在 X 轴上从 -16777215 处开始生成。
Licensed under CC BY-NC-SA 3.0 license otherwise stated
🧭 用户指南 | User Guide
- 配置全解 | Configuration Reference
- 世界重定位功能详解 | Worldgen Reposition
- 命令/locate pos | /locate pos
- 常见问题 | FAQ
📈 项目治理 | Project Management
📚 参考资料 | References