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默认只支持单路径,例如试图连接一条线段的两个非端点创造出一个带分支的圆,是不允许的(不可连接)

 

此外,将图层置于顶/底会改变变换顺序,置底会将图层编号变为最前,置顶会将图层编号变为最末

posted @ 2022-09-05 23:22  树叶本子  阅读(95)  评论(0)    收藏  举报