Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
计算设计中的对象很少在最终位置和形状中显式创建,并且通常基于现有几何体进行转换、旋转和定位。向量数学作为一种几何脚手架,用于提供几何体的方位和方向,以及概念化通过三维空间的移动而不是直观表示。
最基本的是,向量表示三维空间中的位置,通常被视为从位置 (0, 0, 0) 到该位置的箭头端点。可以使用 ByCoordinates 构造函数创建向量,以获取新创建的向量对象的 x、y 和 z 位置。请注意,向量对象不是几何对象,不会显示在 Dynamo 窗口中。但是,有关新创建或修改的向量的信息可以在控制台窗口中打印:
在向量对象上定义一组数学运算,可允许您在三维空间中添加、减去、相乘和移动对象,就像在数字行上的一维空间中移动实数一样。
向量相加定义为两个向量的分量之和,如果两个分量向量箭头按“尖端到尾部”放置,则可以将向量相加定义为结果向量。 向量相加是使用 Add 方法执行的,并由左侧的图表表示。
同样地,可以使用 Subtract 方法将两个向量对象相互减去。可以将向量相减看作从第一个向量到第二个向量的方向。
向量相乘可以看作是按给定比例因子在向量自身方向移动向量的端点。
在缩放向量时,通常需要使结果向量的长度与缩放量完全相等。通过首先标准化向量,即将向量的长度精确设置为一,可以轻松实现该目的。
c 仍指向与 a (1, 2, 3) 相同的方向,虽然现在它的长度完全等于 5。
向量数学中还存在两种其他方法,它们与一维数学、矢积和点积不完全平行。矢积是生成向量的一种方法,该向量(在 90 度)与两个现有向量正交。例如,x 轴和 y 轴的矢积为 z 轴,尽管这两个输入向量不需要相互正交。使用 Cross 方法计算矢积向量。
另外,某些向量数学的更高级函数是点积。两个向量之间的点积是一个实数(不是向量对象),它与两个向量之间的角度相关,但并不完全相关。点积的一个有用属性是:仅当两个向量垂直时,它们之间的点积将为 0。点积使用 Dot 方法计算。
在本节中,您将找到一系列有关使用 DesignScript 创建几何体的课程。接下来,将 DesignScript 示例复制到 Dynamo 代码块。
在计算设计中,曲线和曲面经常用作基础脚手架,用于构建后续几何体。为了使早期几何体用作以后几何体的基础,脚本必须能够提取诸如整个对象区域的位置和方向等特性。曲线和曲面均支持此提取,并且称为参数化。
曲线上的所有点可以看作具有从 0 到 1 的唯一参数。如果基于多个控制点或插值点创建 NurbsCurve,则第一个点将具有参数 0,而最后一个点将具有参数 1。无法提前知道什么是精确参数以及什么是中间点,这听起来像是严重限制,但这可通过一系列实用程序函数来减轻。虽然使用两个参数而不是一个参数(称为 u 和 v),但曲面的参数化与曲线相似。如果我们要使用以下点创建一个曲面:
p1 将具有参数 u = 0 v = 0,而 p9 将具有参数 u = 1 v = 1。
在确定用于生成曲线的点时,参数化并非特别有用,其主要用途是确定 NurbsCurve 和 NurbsSurface 构造函数生成中间点时的位置。
曲线具有 PointAtParameter 方法,该方法采用 0 到 1 之间的单个双精度参数,并返回该参数处的“点”对象。例如,此脚本会在参数 0、.1、.2、.3、.4、.5、.6、.7、.8、.9 和 1 处查找点:
同样,曲面具有 PointAtParameter 方法,该方法采用两个参数,即生成点的 u 和 v 参数。
尽管提取曲线和曲面上的各个点非常有用,但脚本通常需要了解参数处的特定几何特征,例如曲线或曲面面对的方向。CoordinateSystemAtParameter 方法不仅可以查找位置,还能查找位于曲线或曲面参数处的定向 CoordinateSystem。例如,以下脚本沿旋转曲面提取定向 CoordinateSystems,并使用 CoordinateSystems 的方向生成将法线粘滞到曲面的线:
如前所述,参数化在曲线或曲面的长度上并非始终统一,这意味着参数 0.5 并不始终与中点对应,0.25 并不始终对应于曲线或曲面上的 1/4 点。为了解决此限制,曲线还有一组附加的参数化命令,使您可以沿曲线找到特定长度处的点。
Dynamo 标准几何体库中最简单的几何对象是一个点。所有几何体均使用称为构造函数的特殊函数创建,每个函数都返回该特定几何体类型的新实例。在 Dynamo 中,构造函数以对象类型的名称(在本例中为“Point”)开始,然后是构造方法。要创建由 x、y 和 z 笛卡尔坐标指定的三维点,请使用 ByCoordinates 构造函数:
Dynamo 中的构造函数通常使用前缀为“By”指定,调用这些函数将返回该类型的新创建对象。此新创建的对象存储在等号左侧命名的变量中。
大多数对象都有许多不同的构造函数,我们可以使用 BySphericalCoordinates 构造函数创建位于球体上的点,由球体的半径、第一个旋转角度和第二个旋转角度(以度为单位指定)指定:
点可用于构造更大尺寸的几何图形(例如直线)。我们可以使用 ByStartPointEndPoint 构造函数在两点之间创建“直线”对象:
同样,直线可用于创建更多维的曲面几何体,例如使用 Loft 构造函数,该构造函数可获取一系列直线或曲线,并在它们之间内插曲面。
曲面也可用于创建更多维的实体几何体,例如通过按指定距离加厚曲面。许多对象都附加了函数(称为方法),程序员可以对该特定对象执行命令。所有几何图形通用的方法包括 Translate 和 Rotate,分别按指定的量平移(移动)和旋转几何图形。曲面具有 Thicken 方法,该方法采用单个输入,即指定曲面的新厚度的数字。
交点 命令可以从较高维度的对象提取较低维度的几何图形。提取的较低纬度几何图形可以在几何图形创建、提取和重建的循环过程中形成较高维度几何图形的基础。在本示例中,我们使用生成的实体来创建曲面,并使用曲面来创建曲线。
通过在三维空间中明确指出 x、y 和 z 坐标,可以创建特定的几何体对象。但是,通常在对象本身或其基本 CoordinateSystem 上使用几何变换将几何体移动到其最终位置。
最简单的几何变换是平移,可在 x、y 和 z 方向上将对象移动指定的单位数。
虽然 Dynamo 中的所有对象均可通过在对象名称末尾附加 .Translate 方法进行转换,但更复杂的变换需要将对象从一个基础坐标系变换到新坐标系。例如,要绕 x 轴将对象旋转 45 度,我们将对象从其现有 CoordinateSystem(不旋转)变换为 CoordinateSystem(已使用 .Transform 方法绕 x 轴旋转 45 度):
除了平移和旋转外,还可以缩放或剪切 CoordinateSystems。可以使用 .Scale 方法缩放 CoordinateSystem:
通过将非正交向量输入 CoordinateSystem 构造函数,可以创建剪切的 CoordinateSystem。
缩放和剪切是比旋转和平移更复杂的几何变换,因此并非每个 Dynamo 对象都能进行这些变换。下表概述了 Dynamo 对象可以具有非统一比例缩放的 CoordinateSystems 和剪切的 CoordinateSystems。
在 Dynamo 中,有两种基本方法可以创建自由形式的曲线:指定点集合,并使 Dynamo 在它们之间内插平滑曲线,或者通过指定一定阶数曲线的基本控制点的更低级别方法。当设计师确切知道线应采用的形状,或者设计是否具有特定约束来控制曲线可以和不能通过的位置时,插值曲线非常有用。通过控制点指定的曲线本质上是一系列直线线段,算法会将其平滑为最终曲线形式。对于通过不同平滑度探索曲线形状或在需要曲线段之间的平滑连续性时,通过控制点指定曲线非常有用。
要创建插值曲线,只需将点集合传递到 NurbsCurve.ByPoints 方法。
生成的曲线与每个输入点相交,分别在集合中的第一个点和最后一个点开始和结束。可以使用可选的周期性参数创建闭合的周期性曲线。Dynamo 将自动填充缺失的段,因此不需要重复的端点(与起点相同)。
NurbsCurves 的生成方式几乎相同,输入点表示直线段的端点,第二个参数用于指定曲线经历的平滑量和类型(称为阶数)。* 阶数为 1 的曲线没有平滑;它是多段线。
对阶数为 2 的曲线进行平滑处理,使曲线相交并与多段线线段的中点相切:
Dynamo 支持最多 20 阶的 NURBS(非均匀有理 B 样条曲线)曲线,以下脚本说明了增加平滑级别对曲线形状的影响:
请注意,必须至少比曲线阶数多一个控制点。
通过控制点构建曲线的另一个好处是能够保持各个曲线段之间的相切。通过提取最后两个控制点之间的方向,并继续使用以下曲线的前两个控制点来完成此操作。下例创建两条单独的 NURBS 曲线,它们仍然像一条曲线一样平滑:
*这是对 NURBS 曲线几何图形的简单描述;有关更准确、更详细的讨论,请参见参考文献中的“Pottmann, et al, 2007”。
对 NurbsCurve 的二维模拟是 NurbsSurface,与自由形式的 NurbsCurve 一样,可以使用两种基本方法构建 NurbsSurface:输入一组基点并在它们之间内插 Dynamo,然后明确指定曲面的控制点。当设计师确切知道曲面需要的形状或者设计需要曲面通过约束点时,内插曲面也与自由曲线一样非常有用。另一方面,由控制点创建的曲面对于各种平滑级别的探索式设计更为有用。
要创建插值曲面,只需生成与曲面形状近似的点的二维集合即可。集合必须是矩形,即不能出现锯齿。NurbsSurface.ByPoints 方法通过这些点构造曲面。
也可以通过指定曲面的基本控制点来创建自由形式的 NurbsSurfaces。与 NurbsCurves 一样,控制点可以看作是表示具有直线段的四边形网格,这可以平滑到最终的曲面形式(取决于曲面的阶数)。要通过控制点创建 NurbsSurface,请为 NurbsSurface.ByPoints 添加两个附加参数,以指示基本曲线在曲面两个方向上的角度。
我们可以增加 NurbsSurface 的阶数,来更改生成的曲面几何图形:
就像可以通过在一组输入点之间内插来创建曲面一样,可以通过在一组基础曲线之间内插来创建曲面。这称为“放样”。放样曲线是使用 Surface.ByLoft 构造函数创建的,其中输入曲线集合作为唯一参数。
旋转曲面是通过绕中心轴扫掠基础曲线创建的附加类型的曲面。如果插值曲面是对插值曲线的二维模拟,则旋转曲面是对圆和圆弧的二维模拟。
旋转曲面由基本曲线指定,表示曲面的“边”;轴原点、曲面的基点;轴方向、中心“核心”方向;扫掠开始角;以及扫掠结束角。这些曲面用作 Surface.Revolve 构造函数的输入。
尽管 Dynamo 能够创建各种复杂的几何形状,但简单的几何基本体构成任何计算设计的支柱:直接以最终设计形式表示或用作生成更复杂几何体的脚手架。
虽然不是严格的一块几何体,但 CoordinateSystem 是构建几何体的重要工具。CoordinateSystem 对象可记录位置和几何变换(如旋转、调节和缩放)。
以 x = 0、y = 0、z = 0 的点为中心创建 CoordinateSystem,不进行旋转、缩放或调节变换,只需调用 Identity 构造函数:
具有几何变换的 CoordinateSystems 超出本章的范围,但另一个构造函数允许您在特定点 CoordinateSystem.ByOriginVectors 创建坐标系:
最简单的几何基本体是一个点,表示三维空间中的零维位置。如前所述,可以通过几种不同的方式在特定坐标系中创建点:Point.ByCoordinates 使用指定的 x、y 和 z 坐标创建点;Point.ByCartesianCoordinates 使用指定的 x、y 和 z 坐标在特定坐标系中创建点;Point.ByCylindricalCoordinates 使用半径、旋转角度和高度创建位于圆柱体上的点;Point.BySphericalCoordinates 使用半径和两个旋转角度创建位于球体上的点。
本例说明在各种坐标系中创建的点:
下一个较高维度的 Dynamo 基本体是一条线段,表示两个端点之间的无限多个点。可以通过构造函数 Line.ByStartPointEndPoint 明确指定两个边界点,或者通过 Line.ByStartPointDirectionLength 在该方向指定起点、方向和长度来创建直线。
Dynamo 有表示三维中大多数基本类型的几何基本体的对象:立方体,使用 Cuboid.ByLengths 创建;圆锥体,使用 Cone.ByPointsRadius 和 Cone.ByPointsRadii 创建;圆柱体,使用 Cylinder.ByRadiusHeight 创建;球体,使用 Sphere.ByCenterPointRadius 创建。
目前,许多示例都关注从较少维的对象构造较多维的几何体。相交方法允许此较高维度的几何图形生成较低维度的对象,而“修剪”和“选择修剪”命令允许脚本在创建几何形状后对其进行大量修改。
Intersect 方法在 Dynamo 中的所有几何图形上定义,这意味着理论上,任何几何图形都可以与任何其他几何图形相交。通常,由于结果对象将始终是输入点本身,因此某些交点没有意义(例如涉及点的交点)。下图概述了对象之间可能存在的交点组合。下图概述了各种相交操作的结果:
下面非常简单的示例演示了平面与 NurbsSurface 的交集。该交集会生成 NurbsCurve 数组,可像使用任何其他 NurbsCurve 一样使用。
Trim 方法与“Intersect”方法非常相似,因为它几乎为每个几何图形都定义了该方法。但是,与 Intersect 相比,Trim 存在更多限制。
关于 Trim 方法需要注意的是,需要“选择”点、确定要丢弃哪些几何图形的点以及要保留哪些部分。Dynamo 会查找并放弃与选择点最近的已修剪几何图形。
以下 Python 脚本为几个示例生成点数组。应将它们粘贴到 Python 脚本节点,如下所示:
python_points_1
python_points_2
python_points_3
python_points_4
python_points_5
Intersect、Trim 和 SelectTrim 主要用于较低维度的几何图形,例如点、曲线和曲面。另一方面,实体几何图形还有一组附加方法用于在构造后修改形状,方法是以与 Trim 类似的方式减去材质,并将图元合并到一起以形成更大的整体。
Union 方法可获取两个实体对象,并在两个对象覆盖的空间之外创建单个实体对象。对象之间的重叠空间会合并为最终形式。本例将球体和立方体合并为单个实体球体-立方体形状:
Difference 方法类似 Trim,从基础实体中减去输入工具实体的内容。在本例中,我们从球体中穿凿出一个小凹穴:
Intersect 方法会返回两个实体输入之间的重叠实体。在以下示例中,Difference 已更改为 Intersect,并且生成的实体是最初穿凿的缺失空心:
类 | 非统一比例缩放的 CoordinateSystem | 剪切的 CoordinateSystem |
---|---|---|
弧
否
否
NurbsCurve
是
是
Nurbs 曲面
否
否
圆
否
否
直线
是
是
平面
否
否
点
是
是
多边形
否
否
实体
否
否
曲面
否
否
文本
否
否
使用: 点 | 曲线 | 平面 | 曲面 | 实体 |
开: 曲线 | 是 | 否 | 否 | 否 | 否 |
多边形 | - | 否 | 是 | 否 | 否 |
曲面 | - | 是 | 是 | 是 | 是 |
实体 | - | - | 是 | 是 | 是 |
其中: | 曲面 | 曲线 | 平面 | 实体 |
曲面 | 曲线 | 点 | 点,曲线 | 曲面 |
曲线 | 点 | 点 | 点 | 曲线 |
平面 | 曲线 | 点 | 曲线 | 曲线 |
实体 | 曲面 | 曲线 | 曲线 | 实体 |