一、迭代原理

更新于 2026年10月13日 版权声明
一、迭代原理

网络画板的迭代功能是非常强大的,所以我们可以利用网络画板完成一些很复杂的迭代问题.其他画板在使用迭代功能时都有很多限制,特别是进行迭代时,迭代原象点都必须是自由点或者至少是半自由点,迭代的变量也必须是自由变量.如果一定要让原象点是非自由点,或者迭代变量是计算值,那么需要通过一定的变通才能实现,这样对于初学者就造成了很大的障碍.而网络画板的迭代就没有这个限制,原象点不一定要为自由点或半自由点,迭代的变量也不一定要为自由变量.任何点、任何变量或者计算式都能作为原象来用,只要你选择的原象存在子对象就能进行迭代,所以网络画板的迭代功能非常适合初学者.接下来我们具体讲解一下网络画板的迭代.

首先介绍一个简单的案例,现在想实现如图1的效果,该如何迭代?

图示

图1 迭代案例1

要实现这个效果,方法非常多,现在介绍如下三种方法:

共同的步骤如下:如图2,画一个圆O,创建变量t和n,计算t+1.

图示

图2 作圆并创建变量

方法一:1.以点O为缩放中心,缩放比例为0.9,缩放点A得到点B(如图3).

图示

图3 O为缩放中心缩放点A

2.如图4,再以点O为旋转中心,旋转角度为2pi/n,把点A逆时针方向旋转得到点C.

图示

图4 O为中心,点A逆时针方向旋转到点C

3.如图5,把变量t附着到点B,并隐藏点B.

图示

图5 变量t附着到点B

4.选中点A和变量t,进行迭代,如图6.

图示

图6 以A和变量t进行迭代

5.最后把变量t拖动到数值1,变量n拖动到25即可,如图7.

图示

图7 方法一迭代效果图

总结:这个方法的特点是原象既有点对象(点A),又有变量(变量t),而且全部图形包括两部分,一部分是原象(只有一开始的点A和一开始附着的文本1,点C可以隐藏,不会影响图形的显示),另一部分是迭代象(就是文本从2开始一直到文本25,以及包括对应的圆上的各点).可见,总共生成25个文本,只需要迭代24次,还有1次就是最开始的原象对应的文本.

有时候,如果为了统一起见,我们不想借用原象来显示,而想让显示的结果就是一个迭代的整体,那该如何实现呢?

方法二:1.回到一开始的状态,如图8.

图示

图8 开始的状态圆

2.计算2pi*t/n的值,以O为旋转中心,以计算值为旋转角度,把点A逆时针旋转得到点C,如图9.

图示

图9 按计算值旋转点A

3.以点O为缩放中心,把点C按缩放比例0.9缩放得到点B,如图10.

图示

图10 以O为缩放中心缩放点C

4.把计算值m0附着到点B,并隐藏点B,如图11.

图示

图11 计算值m0附着到点B

5.选中变量t进行迭代,如图12.

图示

图12 对变量t进行迭代

6.隐藏点A、点C以及附着的文本,并把变量t拖动到-1,如图13.

图示

图13 方法二迭代效果图

在上面的操作过程中的第4步,为什么要把m0附着到点B,为什么不能把m0的原象t的值附着到点B?我们不妨测试一下,结果如图14.

图示

图14 t值与点B合并迭代效果图

这两者的区别和联系:首先迭代的初始值t都等于-1,图13中迭代m次的结果是图14迭代m-1次的结果.为什么会这样呢?因为图15是对映象m0进行迭代,它生成的第一个迭代象就是m0+1,而图14是对原象t进行迭代,它生成的第一个迭代象就是m0,它生成的第二个迭代象才是上面的m0+1.可见,当初始值不变的情况下,迭代原象产生的第m次结果就是迭代映象产生的第m-1次结果.

如果想把变量t的值附着到点B也产生相同的结果,有没有办法呢?

答案是有的,我们可以修改m1的值为:2pi*(t-1)/n,并且让变量t=0,如图15所示.

图示

图15 t=0,修改m1值迭代效果图

总结:这个方法的特点是所有的图象都是迭代象,原象已经隐藏掉了,这样如果用变量n来控制迭代深度时,处理起来就可以实现统一,而不需要当n=1时再单独处理原象的显隐.这个方法的另一个特点是迭代时的原象只有变量t,而没有点对象.

方法三:1.回到初始状态,如图16.

图示

图16 初始状态图

2.以点O为旋转中心,旋转角度为2pi/n,把点A顺时针旋转得到点B(如图17).

图示

图17 点A顺时针旋转得到点B

3.隐藏点A,以点O为旋转中心,旋转角度为2pi/n,把点B逆时针旋转得到点C(如图18).

图示

图18 点B逆时针旋转得到点C

4.以点O为中心,缩放比例为0.9,缩放点B得到点D,并附着t的值到点D(如图19).

图示

图19 缩放点B到点D,并合并t的值到点D

5.选中变量t、点B进行迭代,如图20.(https://www.daowen.com)

图示

图20 对变量t和点B进行迭代

6.把变量t拖动到0,并隐藏B、C两点和附着的文本,如图21.

图示

图21 方法三迭代效果图

方法还有很多,但这三种方法都是比较常见和实用的方法.

现在再来看看下面这个做法为什么不成功.

失败方法:

图示

图22 自由点A缩放得到点B

1.和前面步骤类似,点A是自由点,点B是缩放点A得到(如图22),接下来把t的值附着到点B,然后旋转点A到点C,旋转角度是2pi*t/n,旋转中心为点O,隐藏点B(如图23).

图示

图23 点B与t的值合并,旋转点A得到点C

2.然后对变量t进行迭代,我们会发现结果如图24所示.

图示

图24 对变量t进行迭代

这里所有的文本都重合在一起,但是点还是分开来的,这是为什么呢?

接下来我们退到第1步的结果,连续变动变量t的值,我们会看到如图25所示的几种结果:

图示

图25 对变量t与点B合并分析图

可见,当t不断变化时,文本的值是会改变的,点C的位置也是会改变的,但是文本的位置却是不变的,这就是为什么迭代的时候可以得到点的图象,但是文本却重合在一起.那么为什么这种办法会失效呢?

首先我们来说一下网络画板迭代的时候“原象”“映象”和“迭代的象”之间有什么关系(如图26)?

图示

图26 迭代对话框中“原象”“映象”和“迭代的象”

1.原象:可以作为原象的对象有两种,一种是点(自由点、半自由点、非自由点都可以,但是迭代生成的点不行),第二种是变量或者计算表达式都可以.

2.映象:映象必须由原象产生,所以一定是原象的子对象或者是子对象的子对象.

3.迭代的象:迭代的象就是可以生成迭代对象的对象,只有原象的子对象或者映象的子对象(当然,映象的子对象肯定也是原象的子对象,所以原象的子对象不限定为直接子对象,可能有多层子对象,甚至包括原象生成的迭代象,这也是累次迭代的基础)可以成为“迭代的象”,从而得到其迭代象.

接着,我们再来看看上面失败的作法,点A是自由对象,它不是原象t的子对象,所以不能通过对变量t的迭代来生成点A以及点A的子对象的迭代象.而变量t却附着在点A的子对象B上,而对象B没有迭代象,所以附着在点B上的文本是不会动的.但是因为文本是变量t附着到点B上的,所以文本就成为了变量t的子对象,所以在对变量t进行迭代时,文本的值是会发生变化的,也就是文本生成了对应的迭代象.再看点C,它是由点A绕点O旋转2pi*t/n得到,这样点C就成为变量t的子对象,所以当对变量t进行迭代时,点C也可以生成迭代象,也就得到圆周上的一系列点.

那么,我们应该如何修改迭代规则,使得文本不光内容会迭代,文本的位置也会随着t的变化而变化呢?

知道了迭代的原理,接下来可以这样修改.为了使得文本的位置跟随改变,文本附着的对象点B就必须在迭代中成为原象的子对象,而要做到这一点,只需要在迭代规则中增加点A为原象即可,迭代规则如图27所示.

图示

图27 迭代增加点A为原象

我们发现,文本的位置的确有变化了,但是为什么不是一个挨着一个呢?

要一个挨着一个的话,只需要把点C的旋转角度改成2pi/n即可(如图28).

图示

图28 点C的旋转角度改成2pi/n后的迭代效果图

如果不这么修改,点C的位置既要受到原象t的影响,又要受到原象A的影响,这两个影响共同叠加,就会出现如图27所示的现象.

但是还有一个问题,修改完后,把变量t拖回到0,得到的结果如图29.

图示

图29 变量t拖回到0时的迭代情况

文本为1的点跑到了点A上面一格,当把变量t变为-1时,也不是我们想要的结果如图30所示.

图示

图30 变量t变为-1时迭代效果图

只有当我们把变量t变为1,迭代深度改成n-1时,才达到了我们想要的效果,如图31所示.

图示

图31 变量t变为1,迭代深度改成n-1时迭代效果图

此时,文本1不是迭代象,文本2到26都是迭代象,也就是此时整个图象分为2类,一类是迭代前就存在的对象(比如文本1),一类就是迭代象(比如文本2到文本26).

为什么必须要借助于迭代前的对象才可以达到效果?

这是因为我们在迭代之前的状态是这样的,文本是在点A的位置.若你不想利用初始文本,而又想都是迭代象的话,目前是做不到的(如图32).

图示

图32 不想利用初始文本

因为迭代象的第一个位置始终是从原始对象的下一个位置开始的.比如说在这里,原始对象就是文本1的位置,那么,当你进行迭代时,点A迭代到下一个位置点C时,文本1也会跟着到下一个位置,也就是点C的位置.所以生成的迭代象,都是从点C的位置开始的(如图33).

图示

图33 从点C的位置开始迭代

而要实现的图中,点C处的文本是2,意味着它之前在点A处的文本必须是1才行,而当把变量t的值变为1时,点C以及点C后面的点都是正确的迭代,但是因为是从点C开始生成对应的迭代象,所以点A处就不是迭代象,而是初始的对象.

接下来我们再来探讨在一开始的这个状态下(如图34),能否实现全部图象都是由迭代象得到.

图示

图34 初始状态图

在初始状态下,当把变量t附着到点B时,要使得文本位置变动,只能让点A成为原象,但是迭代象的位置是从初始对象(点A)位置的下一个位置开始得到第一个迭代象,所以,只能使得点A的这个位置成为迭代象的最后一个位置(因为点A这个位置的下一个位置才是第一个迭代象的位置).那么应该如何做到呢?我们可以这样做:

图示

图35 点C的旋转方向改成顺时针

如图35,把点C的旋转方向改成“顺时针”,变量t的值从27开始,计算式m0变成t-1,效果如图36所示.

图示

图36 修改后效果图

总结:从以上迭代过程可以看出,网络画板在迭代方面的确非常强大,迭代很自由,几乎没什么限制,只要原象和映象之间存在父子关系,那就可以进行迭代,除非他们的子对象只包含计算值,那就不能进行迭代,其他情形都能够进行迭代.在迭代时也要注意一些细节,就是既可以只用变量进行迭代,也可以只用点进行迭代,还可以两者同时使用,这都可以根据个人的需要来确定.还有一点值得注意,生成的迭代象的第一个位置都是从原始对象的下一个位置开始的.

✍AI写作