news 2026/8/23 13:49:08

基于元胞自动机法模拟城镇开发边界增长及枝晶生长的C++程序开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于元胞自动机法模拟城镇开发边界增长及枝晶生长的C++程序开发

元胞自动机机模拟城镇开发边界(UGB)增长 确定其组成的主要元素:元胞、元胞空间、元胞状态、元胞邻域及转变规则 分析模拟城市空间结构;确定模型的参数:繁殖参数、扩散参数、传播参数及受规划约束参数,C++程序,基于元胞自动机法模拟枝晶生长,能实现任意角度(偏心正方算法),同时采用LBM考虑了对流作用对枝晶生长的影响。

最近在搞元胞自动机模拟城市开发边界增长的项目,发现这玩意儿用来玩空间演化真是绝了。先说说城镇开发边界(UGB)模拟的核心要素吧,核心就五个零件:元胞(每个地块)、空间布局(二维网格)、状态(空地/建成区)、邻域关系(周围八个格子)和转变规则(怎么从空地变楼房)。

这里有个骚操作——用四组参数控制城市扩张:

  1. 繁殖参数(生娃速度):空地变建筑的概率
  2. 扩散参数(感染力度):周边建成区对空地的辐射影响
  3. 传播参数(连片效应):建筑群自发扩张的惯性
  4. 规划约束(城管力度):政府规划强制保留的空地比例

咱们可以这么玩代码:

struct Cell { int state; // 0=空地 1=建筑 float plan_constraint; // 规划约束值 }; void simulateGrowth(vector<vector<Cell>>& grid, float spawn, float spread) { // 邻域扫描实现扩散效应 for(auto& row : grid) { for(auto& cell : row) { if(cell.state == 0 && cell.plan_constraint < 0.2) { float neighborEffect = countNeighbors(cell) * spread; if(rand()/(float)RAND_MAX < spawn + neighborEffect) { cell.state = 1; } } } } }

这段代码的精髓在于把规划约束做成了每个元胞的自带属性,这样不同地块可以设置不同级别的开发限制。比如河道边设置0.8的高约束值,直接锁死开发可能。

突然想到之前用同个框架模拟金属枝晶生长,发现城市扩张和晶体生长居然能用一套底层逻辑。这里有个黑科技——偏心正方算法,用来突破传统四邻域/八邻域的限制:

vector<Point> getEccentricNeighbors(Point center, float angle) { // 根据输入角度生成偏移量 vector<Point> offsets; for(int i=0; i<4; ++i) { float theta = angle + i*M_PI/2; offsets.push({round(cos(theta)), round(sin(theta))}); } return offsets; }

这算法妙在通过旋转基础偏移量实现任意生长方向。比如设置45度角,就能得到斜向传播的枝晶结构,模拟不同冷却速率下的晶体形态。

但单纯用元胞自动机模拟流体对枝晶的影响不够带感,于是又整合了LBM(格子玻尔兹曼方法):

class LBM_Solver { vector<float> f[9]; // 九个方向的分布函数 void stream() { // 对流传播步骤 for(int i=0; i<9; ++i){ f[i] = shiftField(f[i], directions[i]); } } void applyFluidEffect(Cell& cell) { // 流体速度影响枝晶生长方向 cell.growthDirection += fluidVelocity * 0.1; } };

这里骚的地方在于把流体速度场和元胞生长方向耦合,实现了熔融金属流动导致枝晶偏转的效果。调试时发现把流体影响系数设到0.15时,枝晶分叉角度和实验照片基本吻合。

搞完这两个项目突然悟了:无论是城市扩张还是晶体生长,本质都是受限扩散过程。规划约束参数就像金属溶液中的杂质,繁殖参数相当于过冷度,不同领域的物理现象在数学层面上居然能相互映射。这种跨学科联动的快感,可能就是建模最上头的部分吧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 10:56:12

FaceFusion局域网访问设置方法

FaceFusion局域网访问设置方法 在使用 FaceFusion 这类基于 Web UI 的人脸替换与增强工具时&#xff0c;很多用户会遇到一个常见需求&#xff1a;希望在局域网内的其他设备&#xff08;如平板、手机或其他电脑&#xff09;上也能访问和操作 FaceFusion 界面。这在团队协作、远…

作者头像 李华
网站建设 2026/8/24 4:28:03

Stable Diffusion 3.5 发布:图像生成新突破

Stable Diffusion 3.5 FP8 发布&#xff1a;图像生成效率的新拐点 你有没有遇到过这种情况&#xff1f;明明写好了精炼的提示词&#xff0c;构图、光影、风格都描述得清清楚楚&#xff0c;结果模型要么“选择性失明”&#xff0c;要么生成一堆模糊拼贴——更别提在16GB显存的消…

作者头像 李华
网站建设 2026/8/24 11:24:04

未来的App不再需要菜单栏?

2013年&#xff0c;电影《她》&#xff08;Her&#xff09;描绘了一个令人着迷又略带不安的未来&#xff1a;人类与操作系统通过自然语言持续对话&#xff0c;AI不仅理解语义&#xff0c;还能感知情绪、记住过往、主动推理——它不再是工具&#xff0c;而是一个“认知伙伴”。 …

作者头像 李华
网站建设 2026/8/20 15:39:53

Flutter 勇闯2D像素游戏之路(三):人物与地图元素的交互

Flutter 勇闯2D像素游戏之路&#xff08;一&#xff09;&#xff1a;一个 Hero 的诞生 Flutter 勇闯2D像素游戏之路&#xff08;二&#xff09;&#xff1a;绘制加载游戏地图 Flutter 勇闯2D像素游戏之路&#xff08;三&#xff09;&#xff1a;人物与地图元素的交互 前言 在…

作者头像 李华
网站建设 2026/8/23 13:12:03

用PyTorch实现轴承故障诊断:多尺度卷积+注意力机制实战

基于多尺度卷积神经网络的滚动轴承故障诊断 针对传统方法在难以自适应提取滚动轴承有效故障特征信息的问题&#xff0c;提出了一种多尺度卷积神经网络的滚动轴承故障诊断方法。 首先&#xff0c;构建了多尺度特征融合模块自适应提取故障样本不同感受野下的特征表示&#xff0c;…

作者头像 李华
网站建设 2026/8/23 3:32:07

基于matlab的凸轮轮廓的设计计算与绘图 计算此结构的最优化参数,根据其原理输出推程和回程的...

基于matlab的凸轮轮廓的设计计算与绘图 计算此结构的最优化参数&#xff0c;根据其原理输出推程和回程的最大压力角、最小曲率半径等相关结果。 程序已调通&#xff0c;可直接运行。打开MATLAB的脚本编辑器&#xff0c;迎面扑来的是熟悉的蓝色界面。咱们今天要折腾的这个凸轮设…

作者头像 李华