10.树形数据的级别|Graft,Flatten和Remap

今天一位叫做“黄”的朋友私信我询问了一些关于“树形数据介绍”帖子的问题,我在参数化群里进行了一些解答,由好心的拓友gt7487534整理成文稿,作为大家学习树形数据系列教程的完结篇。其中有一些问题还是很有意思的,大家可以细细研究,我们发散讨论一下。

一、Divide的用法及注意点

“黄”问我:

图片1

图片2

关于这一点给一个解释:

图片3

简单地说,用两个Divide可以出两点方便连线,一个Divide不方便连线。

说本质一点,是因为初级教程的针对群体是初学者,大家对数据结构认识度还不高。下边两个divide输出的实际上是p1,p2,上边这个也很好解释。无非就是输出的P{1,2},也就是,下边输出的是多个数据,上边是一个树形数据。大家可以在截图中的线形区分很好的理解这个概念。

那么我们怎么分开这两个枝干呢?

二、list item与tree item

如果我们用了一个Divide去等分这两个椭圆,那么输出的数据是一个复杂的树形数据。我们需要将他们分开成两组点,才可以进行连线。

我们都知道10个数据中选1个用的是list item,那么十组树形数据我们想要选择某一组数据,选择某路径上的一组数据用什么呢?

自然要用graft情况下的list item。数据变成树形数据,相当于从二维变成了三维,“升级”了一下,我们把list item升级一下,就会变成这个运算器。

图片4

Tree Item运算器

在这篇询问帖中我的回答部分有使用示范:

http://www.eeeetop.com/forum.php?mod=viewthread&tid=23057

 

从名字很容易看出来,list item是选择list中的某一项,那么这个运算器叫做tree item,自然就是选择树上(树形数据内)的某一个枝干(路径)。

只不过大家还要注意的一点就是,你们输入的路径名称一定要和输出的路径名称一致,这个截图就告诉你们在最简化路径之前选择1路径下的数据,运算器是会报错的。原因很简单你们操作一下拿panel查看一下就明白了(自己动手,理解更深)。

图片5

三、Flatten与Graft用法及其注意点

根据之前的概念,我们继续扩充探讨一下Graft和Flatten。

Flatten:

群友Ocans的举例: flatten,就是把3个年级每个年级10个班,变成一个年级30个班。

我稍微修正一下这个举例,使其更加准确一些:

3个年级每个年级10个班,flatten之后,变成共有30个班(无视年级)。

 

既然用了班级年级的例子,那么我们用再本质的解释一点flatten和graft。

常态数据是3个年级,每个年级十个班。那么按照路径的层级关系,年级是父级,班级是子级。我们会说我是三年级二班,而不会说我是二班三年级。所谓的flatten就是去掉父级的路径信息,大家不管什么年级的,都是1班2班3班。也就是说,在一个{1,2,3}的路径下(一年级二班学号03),flatten之后我们所有1班一队,2班一队。因此树形数据flatten一次之后你再连线,分组还是有的。一直flatten下去,大家就无所谓年级班级学号了,大家都是“平等”的学生,可以互相发生关系。如果不flatten到底,可能就只有年级相同,或者班级相同,或者学号相同的人才能发生关系。所谓的发生关系。我更喜欢解释为我在这个平行宇宙你在那个平行宇宙,我们根本见不着面。

 

Graft:

如果我们给路径graft,两个数据组A和B分别graft再合并在一起,就类似是3年级*10个班=一个学校。那么我们合并了以后会有一个新的父级路径标号(通常都是0开始),大家就理解成是某市的X所学校学生的大集合。A,B,甚至CDEFG分别代表一所学校。再graft,就是几个市合并成了省。graft可以理解为flatten的逆运算,我是这么理解的。graft的都是增加父级的路径。

 

注意:

如果说我们之前一直在说的,让你们产生了一个误区:graft就是路径父级多个0,flatten就是路径少个0,G一次多一个F一次少一个,你们产生了这种感觉的话那就是大!错!特!错!

图片6

(1)Graft不是多出来的分路径就会出现在路径首,不然路径应该是0,1;0,0,1;0,0,0,很显然现在是0,1,0,0。

首先,为什么会多出来路径呢?{0}下(01234)变成{0,0}{0,1}…这样操作的目的是有可能会和{1,0}{n,n}这样的路径合并,为了防止数据紊乱,也就是小朋友们站错队,graft一下。

其次,如果不会和别的数据合并,那么这多出来的一个父级0是没有用的!当然也包括后边子级的这些00000,所以我在帖子里统一起了个名字“无效路径”。
(2)Flatten直接一巴掌给你拍回原形,不管你穿了几层衣服,照相机咔嚓一闪,直接透视到本质。

simplify是非常容易看出来是否有无效路径的命令,第一个0路径从头到尾都是0,如果我们确定不和别的{1,x,x}这样的数据发生关系,便可以将这个父级0称谓无效路径。simply掉它。而flatten,就是一巴掌拍死你,简单粗暴。我们可以看出后边两个0都是有内容的,到最后会变成2,9,所以不是无效的。

图片7

群友“土疙瘩”按照理解提供的参考图:

图片8

那么问题来了,如果我想把0,2,9这样的路径不要一巴掌拍死,而是变成比如0,2,也就是只flatten一级,怎么办呢?此时我们就用Path mapper,这一点“芥末花生”理解的十分到位。

图片9

四、Remap

图片10

“花三疯”在今天的讨论中提到了Remap,那就顺便再解释一下Remap。这个运算器我在自学手册中给出的公式实际上是打错了的…公式应该是:R=(V/S)*T。严谨一些,叫做V在S区间内的位置关系,乘上T区间。

通俗一点来解释:你一个月挣1000,请我吃了顿300的饭,我一个月挣八万,你来找我我请你吃了顿700的饭。你说咱俩谁够意思?怎么比较谁掏钱占得比重更大?这时候就是remap运算器的含义。这是一个非常非常重要的运算器,后期在很多案例都会运用到。

 

最后,再次感谢群友“喝哈嘿”(E拓ID:gt7487534)帮我进行聊天记录的整理。感谢所有参与讨论的群友!

 

希望大家对于Grasshopper中树形数据的理解能够更加深入。下一期,我们将会对Grasshopper中Params标签栏内最后一个常用的,冷门的,高冷孤傲自成一派的伟大运算器Galapagos进行讲解。这个运算器俗称遗传算法,也有叫迭代算法的,也有叫穷举算法找最优解的。这个运算器在高级案例中常常出现,请大家先将所有树形数据的内容弄懂弄透,然后和我一起进入Galapagos运算器的学习!

 

爱你们的小黄人君

DanielJin

 

———————————————————————————————————————————————————————

本文所有内容版权均属于作者所有

欢迎您扫描下方二维码关注小黄人君的微信公众账号

二维码新

1 Comment on “10.树形数据的级别|Graft,Flatten和Remap

  1. 关于‘群友“土疙瘩”按照理解提供的参考图’的疑问:当两个组同时接入graft之后并不会被识别出原先的两个组并分别放入新产生的父级。 我的试验中, graft指令无差别融合了两个组并直接整体加了父级变成了20(10+10)个组.。

发表评论

邮箱地址不会被公开。 必填项已用*标注