🏗️ Grasshopper 入门课 · 数学可视化

数字城市
一行数列如何"长"出天际线

用等差数列当"高度指令",让一排方块瞬间变成一座城市

📚 适合:初一及以上 ⏱️ 学习时长:约45分钟 🔧 需要:Rhino + Grasshopper

🎯 学习目标

🏙️ 1. 情境导入——你见过城市怎么"长"出来吗?

看看这几张真实城市的天际线照片——纽约、上海、迪拜……高低错落的大楼在夕阳下形成美丽的剪影。

🌆 真实城市天际线参考图 建议放置:纽约/上海/迪拜天际线照片 1~2 张,宽幅横图 img_skyline_real.jpg

看这些城市的轮廓——有的楼高,有的楼矮,整体看过去,像不像一排有高有低的数字?

思考:如果我给你一串数字:1, 2, 3, 4, 5 … 你能不能用它们当"高度命令",让一排方块瞬间长成一座城市?

今天,你就来当一回城市规划师。你的规划图不是一张纸,而是一串数字。数字多大,楼就多高。改一个数字,整座城市就跟着变。

🧱 "数字城市"方块体块效果图预览 建议放置:用Grasshopper生成的方块城市渲染图,展示最终效果 img_digital_city_preview.jpg

📐 2. 数学连接——每个数字就是一座楼

想象一条水平线上,等距排列着 10 个位置,每个位置有一座楼,楼的高度分别是:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

🔑 核心逻辑:控制等差数列的 三个参数——首项、公差、项数——就能控制整座城市的形态。
首项 = 第一座楼多高  |  公差 = 楼之间的高度差  |  项数 = 有多少座楼

🖥️ 3. Grasshopper 实操——让数字"长"成城市

1 生成高度数列(约3分钟)

我们需要一串等差数列,作为未来每座楼的"高度指令"

拖出以下电池:

连线:

鼠标悬停在 Series 输出端,确认输出:1, 2, 3, … 10

🔌 步骤1截图:Series电池及三个滑块的连线 建议尺寸:宽800px以上,清晰显示Series电池的S/N/C端口连接 img_step1_series.jpg
✅ 阶段小结:这就是我们城市的"高度指令清单"——10个数字,对应未来10座楼的高度。
2 创建基础方块(约4分钟)

每座楼需要一个"地基"——一个正方形。

此时 Rhino 原点出现一个小正方形——这是一座楼的"地基"。但我们有10座楼,需要10个地基,排在X轴的不同位置。

步骤2截图:Rectangle电池创建地基 显示Rectangle电池、XY Plane、X/Y滑块,以及Rhino视口的小正方形 img_step2_rectangle.jpg
3 阵列平移地基(约6分钟)

让10个地基在X轴上排成一排,间距相等。

3.1 生成X轴偏移量序列:

3.2 把X坐标变成平移向量:

3.3 批量平移:

观察 Rhino:一排10个正方形,整齐排列在X轴上,间距1.2。

↔️ 步骤3截图:Move阵列平移的完整连线 包含第二个Series、Unit X、Multiplication、Move电池及连线 img_step3_move_array.jpg
✅ 阶段小结:现在我们有了一排等距排列的地基。接下来就是最关键的一步——用数列给它们"拔高"。
4 用数列拉伸——数字变高度!(约6分钟)

这是整个课程最核心的连线——把高度数列直接连到拉伸距离上。

观察 Rhino:一排方柱拔地而起!第一个高度1,第二个高度2,第三个高度3……形成逐级升高的阶梯状天际线!🎉

🏗️ ⭐ 步骤4截图:Extrude拉伸——关键连线! 重点显示Extrude的T端连接Series高度数列,以及Rhino视口中拔地而起的方块 img_step4_extrude.jpg
🎉 这就是我们城市的雏形——"等差城市"!数字1,2,3…变成了高度1,2,3…的楼。
5 美化与观察(约3分钟)
🎨 步骤5截图:美化后的城市效果(Perspective视图) 展示着色后的方块城市,从透视角度观察,建议展示多种颜色方案 img_step5_result.jpg

🧪 4. 互动探索——改变三个数字,重建一座城

现在轮到你来当城市规划师了!拖动滑块,观察城市的变化,用"以前…现在…"的句式描述你看到的。

🏔️ 挑战 1

"高度公差"从 1 改为 3

观察:城市变成什么样?

(第一座1→第二座4→第三座7…更陡峭的阶梯)

🧱 挑战 2

"高度公差"改为 0

观察:所有楼一样高吗?

(是的,全部等于首项——一堵整齐的"平头墙")

📉 挑战 3

"高度公差"改为负数,比如 -1

观察:会发生什么?

(第一座最高,逐级降低——下坡天际线)

🔭 挑战 4

"楼数量"改为 50,"楼间距"改为 0.3

观察:天际线延伸到远方……

(一条越来越高的斜线,绵延不断)

🎢 挑战 5(彩蛋)

楼数量=50,高度公差=-0.2,高度首项=10

观察:会产生什么效果?

(从10逐渐降到0,像一道斜坡滑梯)

🖼️ 挑战结果示例图(可选) 展示不同公差/首项/项数下的城市形态对比,可做成拼图 img_challenge_examples.jpg

💡 5. 总结与延伸

今天我们做了什么?

只用了一件事:用 Series 生成一串等差数列,然后把它直接连到 Extrude 的高度端。数字瞬间变成了立体的楼。

🏛️ 参数化的核心逻辑:数据驱动形体
数列 = 你的"高度指令"  |  改公差/首项 = 重写城市规划  |  拖滑块 = 重新定义整座城市的天际线

延伸思考:

📅 下节课预告:

我们将不再只做一排楼,而是做一个二维的"参数化网格森林"——每个格子上长一棵树,树的高度由一张图片的亮度决定!

🗺️ 6. 电池连线拓扑图(参考)

以下是完整的电池连线逻辑,供复习时对照检查:

[高度首项] → (S) Series(高度) (S) → 高度数列 → (T) Extrude (E) → 方块城市 [高度公差] → (N) ↑ (C) ← [楼数量] [楼数量] → (C) ──────────────┘ [XY Plane] → (P) Rectangle (R) → (G) Move (G) → (B) Extrude [边长X/Y] → (X/Y) ↑ (D) ← [Unit Z] ↑ (T) ← 高度数列 [首座位置] → (S) Series(位置) (S) → (A) Multiplication → (T) Move [楼间距] → (N) ↑ (C) ← [楼数量] ↑ (B) ← [Unit X] [楼数量] → (C) ──────────────┘
📊 电池连线拓扑图(高清截图版) 建议用Grasshopper画布截图,标注各电池和关键连线,宽1200px以上 img_topology_diagram.jpg