
1.6 例题5:应用Dynamo绘制x2+y2=R2函数图像
1.解题思路
通过简单的数学运算将函数x2+y2=R2分解为两个部分(图1-47):上半圆y=+sqrt(R2-x2)(-R≤x≤R),下半圆y=-sqrt(R2-x2)(-R≤x≤R)。变量R采用Number Slider(数字滑块)节点代替,这样可以通过前面讲解的知识点来解决问题。

图1-47
但是如果函数结构复杂,便不能通过简单的函数变形求解此类问题,如本例题最后的思考题“笛卡尔—心形线”。如果把它当作纯粹的数学问题来看待,很容易就想到采用极坐标的方法求解。
这里就采用极坐标的方式来构建函数并完成函数图像的绘制。
提示
数学中,极坐标系是一个二维坐标系统。该坐标系统中任意位置可由一个夹角和一段相对原点—极点的距离来表示。
用极坐标系描述的曲线方程称作极坐标方程,通常表示为r为自变量θ的函数。极坐标系中的角度通常表示为角度或者弧度,使用公式2π×rad=360°。
2.知识点
● 极坐标法
● Code Block
3.例题详解
(1)描点法绘制。函数x2+y2=R2的极坐标方式为:
x=Rcos(θ),y=Rsin(θ)(0≤θ≤2π)
使用描点法绘制函数图像,步骤如下:
1)使用Number.Silder(数字滑块)创建一组数值,表示R。
2)使用Range(范围)节点在区间0≤θ≤2π内取一组数值,表示θ,注意转换θ的单位。
3)通过数学运算获取x、y值。
4)将x、y值输入Point.ByCoordinates(根据坐标系生成点)节点,再用闭合曲线NurbsCurve.ByPoints(通过点的样条曲线)节点串联各点,形成可参变R值的圆形,结果如图1-48所示。

图1-48
仅一个简单的函数就用了多个Dynamo节点,能否简化节点呢?
(2)Code Block节点简化节点。这里给大家介绍一个功能强大的Code Block节点,如图1-49所示。在Script(脚本)下的Editor(编辑器)里可以找到,也可以直接在工作空间中双击鼠标左键进行调用。

图1-49
Code Block节点可以直接进行逻辑运算,若出现未知变量,未知变量将被自动视为节点的输入端口,如图1-50所示,书写过程中不可以省略运算符号。

图1-50
Code Block节点可以调用Dynamo中的任何节点,通常是根据节点目录按层级书写,以“.”隔开。例如调用三角函数sin(x),需要先写Math,和编程一样,软件会出现命令提示窗口,供编辑者快速选择,如图1-51所示。当然也有通过直接书写节点名来调用命令的情况,如坐标点节点,Point.ByCoordinates(x,y,z)。有关内容将在“DesignScript语法”的相关章节进行讲解。
提示
输入函数时,注意“()”为英文状态下输入。

图1-51
Code Block节点也可以用于直接编写列表,实现Range节点和Sequence节点的功能,如图1-52所示。即“起始值..终值..数据间距”和“起始值..#总个数..数据间距”。
提示
注意数据之间是两个“.”,而非一个“.”。

图1-52
同理,Code Block节点也可以写为“起始值..终值..#一共被平分的个数”,如图1-53所示。

图1-53
利用Code Block节点,简化本例题中的节点,如图1-54所示。

图1-54
节点可以继续简化,如图1-55所示,节点中所用DesignScript语法的相关内容详后续章节,此处不做要求。

图1-55
保存文件为“x2+y2=R2函数.dyn”。
思考题:应用Dynamo绘制笛卡尔—心形线(图1-56)
笛卡尔—心形线函数方程式为:
x2+y2+a×x=a×sqrt(x2+y2)
x2+y2-a×x=a×sqrt(x2+y2)

图1-56
提示
笛卡尔—心形线参数式方程:
x=a×[2cos(t)-cos(2t)];y=a×[2sin(t)-sin(2t)],其中-π≤t≤π或0≤t≤2π。