如何获取某个坍缩后的值在不同坐标系统中的位置

十进制

一个十进制数 372,可以通过如下方式单独取出 3、7、2 三个数
372 % 10 = 2 372 / 10 % 10 = 7 372 / 10 / 10 % 10 = 3 \begin{aligned} 372 \% 10 = 2 \\ 372 / 10 \% 10 = 7 \\ 372 / 10 / 10 \% 10 = 3 \end{aligned} 372%10=2372/10%10=7372/10/10%10=3

在十进制系统中,372 可以看成 10 × 10 × 10 坐标系中的某个点,乘法表示一种维度的提升,所以这是一个三维的系统,取模运算可以提取当前维度的值,除法运算可以降低维度,通过这两者的组合,可以提取出任意一个维度的坐标值。

非十进制

假设是一个 7进制系统,那么 372 可以表示为 7 × 7 × 7 × 7 坐标系中的某个点(因为 7 3 < 372 7^3 < 372 73<372),通过相同的方法(取模用于提取当前维度的值,除法用于降低维度),可以提取出每个维度中的坐标值。
372 % 7 = 1 372 / 7 % 7 = 4 372 / 7 / 7 % 7 = 0 372 / 7 / 7 / 7 % 7 = 1 \begin{aligned} 372 \% 7 = 1 \\ 372 / 7 \% 7 = 4 \\ 372 / 7 / 7 \% 7 = 0\\ 372 / 7 / 7 / 7 \% 7 = 1 \end{aligned} 372%7=1372/7%7=4372/7/7%7=0372/7/7/7%7=1

所以最终结果是1041(从下往上取值)。

不规则的系统

无论十进制还是七进制,每个维度的值都是相同的,如果有一个 m × n 的坐标系,该如何确定某个值在每个坐标上的值呢?可以使用同样的方法,假设一个 8 × 9 的坐标系,可以把 8 当作维度信息,9 当作进制信息。对于某个具体的数,64,我们先取 最低位的值,通过 64 % 9 = 1 64 \% 9=1 64%9=1 得到,然后在取另一个维度的值,通过降维再取模得到 64 / 9 % 8 = 7 64/9\%8=7 64/9%8=7,所以 64 对应的坐标值为71。表示 64 = 7 ∗ 9 1 + 1 ∗ 8 0 64 = 7 * 9^1 + 1*8^0 64=791+180。如果是一个 9 × 8 的坐标系,则 64 对应的值为 80 = 8 × 8 1 + 0 × 9 0 80=8\times8^1+0\times9^0 80=8×81+0×90。所以取的坐标系不同,所得到的值也不同。

总结

对于一个 a 1 × a 2 × . . . × a n a_1 \times a_2 \times ... \times a_n a1×a2×...×an的坐标系,通过如下方式确定某个坍缩后的值 X X X 在该坐标系中的取值 ( A 1 , A 2 , . . . , A n ) (A_1,A_2,...,A_n) (A1,A2,...,An)
A n = X % a n A n − 1 = X / a n % a n − 1 . . . A 1 = X / a n / a n − 1 / . . . / a 2 % a 1 \begin{aligned} A_n &= X \%a_n \\ A_{n-1}&=X/a_n\%a_{n-1} \\ ... \\ A_1&=X/a_n/a_{n-1}/.../a_2\%a_1 \end{aligned} AnAn1...A1=X%an=X/an%an1=X/an/an1/.../a2%a1

除法运算可以降低维度,取模运算可以提取当前维度的值,通过这两者的组合,可以最终确定某个值 X 在该坐标系中的位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值