【制作过程】

更新于 2026年10月13日 版权声明
【制作过程】

1.首先利用一次迭代制作图形的框架(如图1):由于这个比较简单,而且在网络画板周赛第83期(第82篇)“路灯状态须存取,累次迭代建奇功”里提过这个作法,在这里就不再赘述了.

图示

图1 通过迭代(一次迭代)制作约瑟夫抽杀图形的框架

2.新建变量以及计算式,以便于后面进行关键的第2次迭代(如图2).

图示

图2 新建变量和测量计算

其中变量n和第一步中的变量n是同一个变量,表示总人数;变量s用于生成第3次迭代,目的是使得第2次迭代的结果对第3次迭代产生影响;变量t2、m8、m6、m7用于第2次迭代.

3.制作第2次迭代:

①点A是绘制圆时的半自由点;

②以坐标原点O为中心,缩放比为1.1缩放点A生成点B;

③以坐标原点O为中心,把点B逆时针旋转2pi*t2/n得到点C;

④生成第2次迭代(如图3).

图示

图3 第二次作迭代

说明:这一步迭代是本例的关键,也是本例的难点,作用就是产生每一步抽杀时被杀掉的人的编号,具体是通过变量m的值来控制进行了多少步,而这个控制又是通过第3个迭代中的迭代变量s来控制.也就是说,在本次迭代中,控制第几个人被杀掉是由这里的变量s来决定的.

这个迭代原理就是用到了之前推导的约瑟夫环递推公式:f(N,M)=(f(N-1,M)+M)%N.(https://www.daowen.com)

t2可以理解为公式中的f(N-1,M),m8可以理解为公式中的f(N,M),m8中的d表示公式中的M,m6表示是公式中的N.

这个迭代具体解释如下:因为每次循环都会从新的编号0开始,所以如果想计算第s次循环后,被杀掉的人的编号,那就要从编号0(对应f(N-1,M)的值)开始,此时总人数为n-s+1(对应N的值),利用递推公式反推s次,就得到目标的原始状态下的编号了.

4.为最后一次迭代做准备(如图4):

①在第2次最终迭代上取点D;

②以坐标原点O为缩放中心,缩放比为1/1.1缩放点D得到点E;

③把变量s附着到点D;

④把标记“×”附着到点E.

图示

图4 最后一次迭代准备图

说明:为了看得清新构造的点,在这里先让变量s变成1.

5.进行最后一次迭代(如图5).

图示

图5 最后一次迭代

说明:迭代中的对象[30]和对象[31]就是上一步附着的s和标记“×”.

6.最后把变量s拖动到0,把一些其他不相干的对象隐藏就可以了.

✍AI写作