(又好久没有更新了,这学期打算主要写两部分内容,数字生成练习和参数化建模练习。作为一个准备入门的小白,现学现卖,这是第一期,希望能坚持吧。)
1、任务介绍
(自“大水牛参数化设计”公众号引用)
上图所呈现的图形为黄金螺线阵列。可以看做是一个圆经过一个极坐标函数图像阵列而成。
生成方法是,用等距(等角)取点的方法,用等差数列递增函数自变量,从而可以得到坐标系里的一列点阵(回忆中学数学函数描点作图法);再以每个点为圆心画圆。
(自“算法与数学之美”公众号引用)
2、grasshopper的生成方法
grasshopper的python调用的rhino的API库,所以生成代码也基本上一样。
首先是不用python的电池图:
接着打算用Gh_python写出所有函数,仅预留一个Slider作为参数,没能做好数据类型转换,输出数据为单一数据,不能迭代出一个数列,便把range外置(代码如下):
import rhinoscriptsyntax as rs
import math
s = 137.508
t = math.sqrt(x)
g = x*s
z = rs.Polar([0,0,0],g,t)
a = rs.AddCircle(z,0.4)
后经尝试,用List.append()方法输出列表,最终成功实现输出(代码如下):
import rhinoscriptsyntax as rs
import math
a = []
s = 137.508
for i in range(0,int(x)):
t = math.sqrt(i)
g = i*s
z = rs.Polar([0,0,0],g,t)
b = rs.AddCircle(z,0.4)
a.append(b)
3、processing的生成方法
我的processing调用的python模块(现有的教程多为Java模块,二者语法不同,函数名相同),因没有找到极坐标的函数方法,使用了平面坐标系:
size(600,600) //设置绘图窗口
for i in range(0,500):
r = sqrt(100*i) //“100*”目的使显示图像放大10倍
a = i*137.508
x = r*cos(a)+300 //极坐标与平面坐标转换,回忆高中数学
y = r*sin(a)+300//processing坐标系原点在左上角第一个像素点,“+300”使图形居中
ellipse(x,y,4,4) //画圆的函数方法
效果如下:
4、Sketchup的生成方法
Sketchup的二次开发语言为Ruby,和python语法不同,Sketchup自带的API绘图库函数也是独特的,代码如下:
require "sketchup.rb" #调用模块
0.step(500,1) do |i| #递增,pyhton的for…range是遍历数组
r = sqrt(100*i)
a = i*137.508
x = r*cos(a)
y = r*sin(a)
end #结束递增
效果如下:(为了显示明显,把边线宽度设置为了10)
5、总结
对于纯粹的数字生成,使用不同的工具,原理相同,方法或许不同,可操作性不同,结果相同。
本人接触三种工具的初衷都是为了突破现有建模上的一些局限,编程学习的难易度因人而异,本人因不能坚持而接触过数种语言,最终无一有所成。
要看懂以上内容,需有入门级的编程阅读能力和一部分工具使用能力。
互勉。
领取专属 10元无门槛券
私享最新 技术干货