modern 发表于 2011-7-31 09:52:28

Grasshopper中的向量(Vector)

Grasshopper中的向量(Vector) Grasshopper 中提供的向量功能是 Rhino 中没有的概念,因此可能很多即便熟悉 Rhino 的用户在学习 Grasshopper 的时候也会对这部分有一些陌生,本篇教学旨在为学习Grasshopper 的向量功能提供一些帮助。 无论在 Grasshopper 中还是初中课本里,向量就是向量,他都代表同样的意思:既具有大小又具有方向的量。在 Rhino 中制作模型,比如画曲线,拉控制点,移动,阵列物体等等几乎所有的手工建模都是在反复的做定义距离和方向的工作。而在以程序建模(参数化建模)的软件中,这个工作我们希望是尽量以输入数据和程序自动计算的方式来完成,以替代传统的手工去画的方式,在 Grasshopper 或者其他的参数化建模的软件中用来完成这个工作的工具就是向量。 我们先来看看grasshopper中的向量物件是如何画出来的:如下图中,vector 栏中可以找到 vector 2pt 工具,这个工具 是 Grasshopper 中一个标准的定义向量物件的工具。其中元件左边的 A 和 B 端需要输入两个不同的“点坐标”数据,右边 V 端便可以输出一个方向由 A 到 B,大小为 A 到 B 的长度值的向量。例如: 在Rhino场景中放置2个点物件:点1 和 点2,然后在 Grasshopper 中用两个point元件从 Rhino 中拾取这2个点,然后把这两个 point 元件分别接到 vector 2pt 的 A和 B 端,这样在 Grasshopper 中便生成了一个:方向由点1到点2 大小为点1到点2的距离值的向量,如图所示: Rhino中没有看到向量?没错,因为向量不是一个常规标准几何物件,所以在 Rhino 中是看不到向量物件的,但是有时候为了检查和分析,我们需要直观的在 Rhino 场景中看到这些向量物件,这种情况下我们可以使用 Display 工具,如下图所示。Display工具物件有2个输入口, A 和 V,V 端接入需要在Rhino场景中显示的向量,而 A 端则需要输入一个点物件,用于定义需要显示的向量的起始点。可能你会对这个“起始点”有些疑惑,刚才我们定义的向量是从点1到点2,那么点1应该就是起始点呀?为什么还要另外定义一个起始点?这里还要再特别强调一下向量的概念:向量只代表了一个具有大小和方向的量,并没有位置的定义。在这个例子中我们是以两个点的方式来定义一个向量,因此这个向量获得了这两个点之间的距离和方向的数据,因此还需要告诉程序向量显示在三维空间中的具体位置,因此我们需要定义一个这样的“起始点”。在这里,为了直观看出向量是从点1到点2的方式定义的,所以我们就以点1作为这个起始点输入到display工具的 A 端,如下图所示。显示效果如图。我们已经看到了显示出来的向量。
如果我们在display工具的输入口输入其他的点,那么这个向量就会显示在其他的位置,如下图所示。以上两个不同的方式只是把同一个向量显示在不同的位置处,虽然显示出的向量在不同的位置,但是向量本身并没有不同。除了vector 2pt 工具,Grasshopper 还提供了一种直接以一个点来定义向量的方式,如图所示。这种方式其实仍然是以2个点的方法定义向量,只是第一个点是默认的世界坐标原点,所以只需要入另外一个点坐标。这种方式得到的向量的方向就是从原点到这个点的方向,而距离就是这个点到原点的距离。如下图是使用前面的点1和点2输入得到向量,为了直观,把向量的起始点设置为原点。因为输入了2个点:点1跟点2 ,因此得到了2个向量。Grasshopper 中除了如上两中常见在定义初始向量的方式,还有好几种其他的方法都可以定义向量,在 vector 栏目的 vector 中找到对应的这些元件。顺便提一下,我们也可以使用 params 栏目下的 vec 元件直接点右键使用 set one vector 或者 set mutilple vector 在Rhino场景中定义向量,默认初始点就是原点,也可以在指令区点 startpoint 切换成以2个点定义向量的方式,也即是前面我们介绍的两中定义向量的方式。了解了Grasshopper中的向量元素的概念之后,下面是一个简单的利用向量元件的小案例。效果如下:下面简要介绍一下制作过程:
打开场景,如图所示,场景中有上下放置的两块曲面。在 Grasshopper 中,如下图设置在左边的两个 srf 元素上点右键选 set one surface ,分别在 Rhino 场景中各拾取一块曲面,上下两块曲面都依据UV分布各自提取出100个点,效果如下图所示。接下来依据上下两块曲面上对应提取出来的点作为起始点和结束点定义向量。如图所示
如前面所说,这时候向量已经生成,按照如下设置在场景中显示出向量。正确显示出的向量效果如图
接下来我们要在 Grasshopper 中作一根圆管的程序,程序如下图所示:
这个程序比较简单,就不具体解释,需要说明:右边的 S 端输出的是圆管几何体,V 端输出的是圆管对应的向量,其向量的方向是圆管的轴心方向,大小是圆管长度的值。Rhino场景中效果图图所示。

接下来要做的就是:把圆管复制到曲面上100个点对应的位置。在 Rhino中,有一个工具叫做 Orient,中文叫做定位,他的工作原理是首先拾取场景中的2个点作为定位参考点,然后再拾取另外2个目标点,一句前后连个点之间的方位讯息为依据,将物件复制,这个方法的好处是可以同时定位物件的基准点,方向,并且缩放尺寸,不清楚这个工具使用方法的朋友可以在rhino的帮助文件查询该工具的纤细说明。在 Grasshopper 中,同样有一个 Orient,功能也完全一样,但是用于定位的方式有些区别,它是利用基准点和向量的方式来复制物件。如图所示:该元件有5个输入口,G为需要复制的几何体输入端,pA 和 pB 分别为几何体的参考基准点和目标基准点,而da和db则代表几何物件的参考向量和目标向量,简单解释就是:pA 和 pB 定义几何体的基准点,而 dA 和 dB 定义几何体的大小和方向。连接方式如下:如果前面的步骤没问题,那么正确的效果应该如下图所示,所需要的曲面已经生成。
接下来的编辑曲面的部分因为不是该教学的主要介绍部分因此跳过,您也可以直接在Rhino中处理后面的部分,最终效果如图:每一根立足高度越高也就越粗,越矮的也越细,顶部整体呈现曲面起伏的感觉,整体形成一种有规律的美感。如下图所示,运用类似的逻辑,配合向量的运用,可以制作其他更复杂的效果。

暗夜狐狸 发表于 2011-8-1 11:39:17

谢老师最后一个怎么做的。。。如果是我我会先建曲面,在曲面上布置点,打乱位置然后提取法线方向,方向+点=平面,然后再平面上创建管子

scandal 发表于 2011-8-6 15:53:55

学习了,感谢!

nelogt 发表于 2011-9-7 17:35:59

为什么有几张图片看不见啊,难道人品问题

周奇倩 发表于 2011-9-19 19:57:55

我终于找到我要的了,希望长期和您交流

tanhelxf 发表于 2011-10-10 22:01:53

非常感谢,好资源

疯小K 发表于 2011-10-18 18:33:55

奥,鸟巢的模型是不是也是这么做的 啊

s.k. 发表于 2011-11-30 21:38:21

M打最后那个是怎么做是???

秒速五厘 发表于 2012-6-15 11:14:17

我不得不顶了……

bendit 发表于 2012-9-20 16:19:00

激动人心,无法言表!

nz胖子 发表于 2013-3-29 16:40:54

高手就是高手 强烈支持楼主ing……

jair 发表于 2013-7-17 10:31:18

真是难得给力的帖子啊。

万能 发表于 2013-8-9 16:09:21

强烈支持楼主ing……

机器人老大 发表于 2014-11-19 11:25:08

赞楼主...希望多交流

yinsheng2198 发表于 2015-10-2 06:06:54

我不得不顶了……
页: [1]
查看完整版本: Grasshopper中的向量(Vector)