🎯 学习目标
- 数学理解:直观看到等差数列的公差、首项、项数如何决定"城市"的形态,理解"数列→高度"的数据映射关系。
- 逻辑建构:掌握"一维数列驱动三维形体"的数据流——每个数字变成一个方块的"高度指令"。
- 软件操作:学会 Extrude(拉伸成体)的基本用法;熟练 Series 的参数调节;初步接触 Move 的阵列平移。
- 创意激发:看到一行枯燥的数字瞬间变成高低错落的城市模型,感受"用数学当画笔"的掌控感和惊喜。
🏙️ 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
- 这是什么数列?→ 等差数列,首项 = 1,公差 = 1,项数 = 10。
- 改一下公差会怎样?比如公差变成 2,高度变成:1, 3, 5, 7, 9, 11, 13, 15, 17, 19——高楼和矮楼的差距更大了。
🔑 核心逻辑:控制等差数列的 三个参数——首项、公差、项数——就能控制整座城市的形态。
首项 = 第一座楼多高 | 公差 = 楼之间的高度差 | 项数 = 有多少座楼
🖥️ 3. Grasshopper 实操——让数字"长"成城市
1 生成高度数列(约3分钟)我们需要一串等差数列,作为未来每座楼的"高度指令"。
拖出以下电池:
- Number Slider ×3:名称分别设为"高度首项"(值=1.0,范围0~20)、"高度公差"(值=1.0,范围-5~10)、"楼数量"(值=10,整数,范围2~100)
- Series ——菜单路径:Sets → Sequence → Series
连线:
- S 端 ← 连"高度首项"滑块
- N 端 ← 连"高度公差"滑块
- C 端 ← 连"楼数量"滑块
鼠标悬停在 Series 输出端,确认输出:1, 2, 3, … 10。
🔌
步骤1截图:Series电池及三个滑块的连线
建议尺寸:宽800px以上,清晰显示Series电池的S/N/C端口连接
img_step1_series.jpg
✅ 阶段小结:这就是我们城市的"高度指令清单"——10个数字,对应未来10座楼的高度。
2 创建基础方块(约4分钟)每座楼需要一个"地基"——一个正方形。
- 拖出 Rectangle ——菜单路径:Curve → Primitive → Rectangle
- P 端:连 XY Plane(默认XY平面)
- X 端和 Y 端:各连一个 Number Slider,分别设为 0.8 和 0.8(底面0.8×0.8的正方形)
此时 Rhino 原点出现一个小正方形——这是一座楼的"地基"。但我们有10座楼,需要10个地基,排在X轴的不同位置。
⬜
步骤2截图:Rectangle电池创建地基
显示Rectangle电池、XY Plane、X/Y滑块,以及Rhino视口的小正方形
img_step2_rectangle.jpg
3 阵列平移地基(约6分钟)让10个地基在X轴上排成一排,间距相等。
3.1 生成X轴偏移量序列:
- 再拖一个 Series 电池
- S 端滑块"首座位置"= 0,N 端滑块"楼间距"= 1.2,C 端连同一个"楼数量"滑块(10)
- 输出:0, 1.2, 2.4, 3.6 …(X坐标递增)
3.2 把X坐标变成平移向量:
- 拖出 Unit X ——菜单路径:Vector → Vector → Unit X
- 拖出 Multiplication ——菜单路径:Math → Operators → Multiplication
- A 端连X坐标序列,B 端连 Unit X。输出 = X方向、长度递增的一组向量。
3.3 批量平移:
- 拖出 Move ——菜单路径:Transform → Euclidean → Move
- G 端连 Rectangle 的输出 R
- T 端连 Multiplication 输出的向量组
观察 Rhino:一排10个正方形,整齐排列在X轴上,间距1.2。
↔️
步骤3截图:Move阵列平移的完整连线
包含第二个Series、Unit X、Multiplication、Move电池及连线
img_step3_move_array.jpg
✅ 阶段小结:现在我们有了一排等距排列的地基。接下来就是最关键的一步——用数列给它们"拔高"。
4 用数列拉伸——数字变高度!(约6分钟)这是整个课程最核心的连线——把高度数列直接连到拉伸距离上。
- 拖出 Extrude ——菜单路径:Surface → Freeform → Extrude
- B 端(Base):连 Move 输出的平移后正方形(G 端)
- D 端(Direction):连 Unit Z ——菜单路径:Vector → Vector → Unit Z(竖直向上)
- T 端(Distance/Thickness):连接第一步 Series 输出的高度数列!
观察 Rhino:一排方柱拔地而起!第一个高度1,第二个高度2,第三个高度3……形成逐级升高的阶梯状天际线!🎉
🏗️
⭐ 步骤4截图:Extrude拉伸——关键连线!
重点显示Extrude的T端连接Series高度数列,以及Rhino视口中拔地而起的方块
img_step4_extrude.jpg
🎉 这就是我们城市的雏形——"等差城市"!数字1,2,3…变成了高度1,2,3…的楼。
5 美化与观察(约3分钟)- 在 Rhino 中选中所有方块,给它换一个颜色(浅灰或玻璃蓝),更像真实建筑。
- 旋转 Perspective 视图,从不同角度欣赏你的"城市"。
- (可选)拖出 Brep Edges 观察体块边缘,或直接看体块即可。
🎨
步骤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 的高度端。数字瞬间变成了立体的楼。
🏛️ 参数化的核心逻辑:数据驱动形体。
数列 = 你的"高度指令" | 改公差/首项 = 重写城市规划 | 拖滑块 = 重新定义整座城市的天际线
延伸思考:
- 🤔 能不能让高度不是等差数列,而是随机数?(提示:用 Random 电池替换 Series——下节课讲"随机城市")
- 🤔 如果把楼的数量改成100,间距改小,能不能做一面"参数化墙面"?
📅 下节课预告:
我们将不再只做一排楼,而是做一个二维的"参数化网格森林"——每个格子上长一棵树,树的高度由一张图片的亮度决定!
🗺️ 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