manim svg Transform
Transform基于路径的条数来操作
1、如果从n条路径Transform到n条路径,那么只有Transform效果(最佳效果)(这里的一条路径可以是闭合的,也可以是不闭合的,也可以是闭合但有分支的)
2、如果从n条路径Transform到m条路径
如果n>m,那么在n条路径中,m条路径会一一Transform到结果的m条路径,剩下的n-m条路径会以类似FadeIn的效果Transform到m条路径中的n-m条路径,这样看起来就会有重复的效果
如果n<m,那么在n条路径中,所有路径会一一Transform到m条路径中的n条路径,其中m-n条路径会以类似FadeIn的效果Transform到m条路径中剩下的m-n条路径,这样看起来也会有重复的效果
故大多数情况下我们使用1。这里一一Transform的顺序和画svg的顺序是一样的
缺点是某些节点处会出现断裂的现象,解决办法是将其变为平滑节点即可
其次,我们从节点的顺序考虑
一:非平滑节点
我们分别画两个矩形,其中第一个的顺序为:左上>右上>右下>左下,第二个的顺序为:右下>左下>左上>右上。可以发现transform的过程中发生了翻转,如果同顺序则不会
所以可以断定:svg的transform中最基本的逻辑是按顺序将两个svg的节点匹配
1、如果两个svg的节点个数相等,则一一变换
2、若svg1的节点个数(n个)大于svg2(m个)
svg1中的n个节点会分散地取m个,转变到svg2中,剩余的n-m个节点会转变成边的某一个点(而不是与另一个顶点重合)
3、若svg1的节点个数(n个)小于svg2(m个)
svg1中的n个节点会分散地转变成svg2中的n个节点,并在边中多生出m-n个节点转变到svg2中
二:平滑节点
基本前提和前面一致,将两个svg的节点按顺序匹配,如果不一致,会出现翻转
其他部分也和上述一致,只不过平滑节点很难看出节点个数的增多/减少
三:非平滑节点与平滑节点
和上述结论一致
接下来,我们考察后期操作对transform的影响
1、后期增减节点不改变节点的顺序,节点的顺序由路径顺序决定
我的操作是,先画一个三角形和四边形,其次在三角形中插入一个节点,使之称为四边形。结果发现transform时并没有翻转,这说明插入的节点在顺序上并不是最后一个。节点的顺序由路径的顺序决定(一般为逆时针/顺时针);实验后发现删除节点也不影响顺序
2、合并路径
首先,合并路径后的svg会变成文件中的最后一个svg;其次,会出现很怪异的现象:合并到原路径上的附加路径会承担所有的变化任务,原路径在transform中会退化成一个点
需要注意的是,inkscape默认只支持单路径,例如试图连接一条线段的两个非端点创造出一个带分支的圆,是不允许的(不可连接)
此外,将图层置于顶/底会改变变换顺序,置底会将图层编号变为最前,置顶会将图层编号变为最末
浙公网安备 33010602011771号