向日葵的黄金螺线

(又好久没有更新了,这学期打算主要写两部分内容,数字生成练习和参数化建模练习。作为一个准备入门的小白,现学现卖,这是第一期,希望能坚持吧。)

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、总结

对于纯粹的数字生成,使用不同的工具,原理相同,方法或许不同,可操作性不同,结果相同。

本人接触三种工具的初衷都是为了突破现有建模上的一些局限,编程学习的难易度因人而异,本人因不能坚持而接触过数种语言,最终无一有所成。

要看懂以上内容,需有入门级的编程阅读能力和一部分工具使用能力。

互勉。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180907G0426500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券