NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 651|回复: 15

[开放式任务] 【Noah.】任务发布 - 路网生成

[复制链接]
发表于 2019-9-25 15:46:43 | 显示全部楼层 |阅读模式
请先仔细阅读开源Noah.开源公测任务书
从0927起至1015截止, 我们针对道路生成进行开发任务发布。所有参与任务均在该贴下直接回复!

我们的现有算法提供的是一种思维框架,例如“道路生成”仅是一种思路,而不是所有思路,希望大家提供自己的想法,一起交流分享,并不断丰富这个框架。
5.gif

1.欢迎各位在此基础上编写自己的更有意思的逻辑,我们会对其进行筛选采纳(tips:环形路网,放射路网,混合路网等)。
2.也可以现有道路生成中加入自己新的趣味元素。
3.同时鼓励使用已有的开发级电池。





请务必仔细阅读“开源公测任务书”的开发原则:
为了确保大家的努力能够相互之间更好的联系在一起,开发规则如下,请务必遵守:
我们近期会推出智能化设计开发基础课程,如果想参加开发,但以下规则无法读懂,推荐参与此培训。
1、独立原则:每次开发任务务必是以“绘图级”or“开发级”算法所表述的一个完整独立功能进行开发。(即提交的是一个完整版打包好的电池)

2、数据兼容:输入端和输出端的设计,要满足树形数据运算法则。如原算法规定了输入和输出数据结构的规则,请按此规则编写输入和输出。(目的是任何一个“绘图级”电池被替换后,完整的工作流数据不会混乱,每个“绘图级”算法的升级,不能给其他“绘图级”算法造成负担)

3、极简变量:变量的设计上考虑最简变量原则(即最终打包的Cluster输入变量最少)必要时请设计二级变量(即Cluster内部调试的变量)。

4、高兼容性:每个“绘图级”电池,未来都会面对各种各样的输入变量,debug是我们开发团队过去几个月一直在奋战的工作内容,很多功能写出来不难,提高兼容性很难。所以希望各位务必考虑多种情况,尽量让自己的算法完善。我们在开源的电池组里发布了若干debug数据结构的方法,大家可以参考。

5、思路清晰:电池排列务必横平竖直,连线长度适宜,逻辑分组清晰,功能标注明确,二、三级Cluster打包思路清晰。(开发团队战力有限,混乱的电池可能不会有精力去分析。)

6、过程记录:编写开发日志,详细阐述算法的设计思路和优势。根据开发团队的经验,一个“绘图级”算法逻辑一般需要重新拟定3到5次,每次升级扩大其适用范围并减少bug的发生积率,这些信息和过程写入开发日志很重要。整个进程中,一旦“迷路”,只能重来。

7、原生电池:我们鼓励大家使用原生电池,任何第三方插件不可纳入其中,C#orPython的编写在原生电池可以实现的前提下尽量回避,本开源计划只有更多的人能读懂这个算法过程的时候才更具价值。原生电池确实限制了一些大神的发挥,但同时也屏蔽了诸多GH平台之外的bug。我们不鼓励有人把Cluster原功能翻译成代码上交,可能速度会更快,后期的交流、升级、互动都不可持续。
最终成果依据开发原则,由Noah开发者进行打分评选

有何奖励?
1.所有参与者均有不等的论坛积分奖励
2.所有被Noah.采纳成果的作者,被授予“Noah.算法贡献者”称号,赠送NCFZ创世会员名额一个(可转赠),并有机会加入Noah协同开发者小组。
发表于 2019-9-28 13:39:37 | 显示全部楼层
本帖最后由 yexuan 于 2019-9-28 13:43 编辑

首先感谢ncf的大大们能够抽那么长的时间花心思做这些,而且还免费的开源了,很不容易,致敬!!!


-------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------

发现问题
言归正传,我们先了解一下这个路网是怎么生成的。

6JRHW{1I]_TKLK~WD82UAPM.png
首先将用地范围炸开,在最长的线段上的0.2到0.7的范围内随机取点的法向平面,求这个平面与用地的交点然后连线,将用地分为俩块,然后俩块用地范围线重复上述操作,重复一定次数形成路网。
R7GEM{~}]1Q2_(GS[920$EI.png 5U)T{N[IO(@J11DPH~0H}NB.png
但由于生成路网的点都是在0.2到0.7的范围内取值,所以难免存在有一些点会靠的很近,也就是俩个路口距离很近,比如下图生成的路网,最近的俩个点只有9米,这无疑是一段不合理的道路。

J`39]SMA1(KPM3M{R10%PX7.png



----------------------------------------------------------------------------分割线---------------------------------------------------------------------------------------------------

解决问题
一个简单便捷的方法便是将俩个距离过近的点合并,然后生成一个环岛。
因为并不改变路网,所以操作都在地块划分里面。



I%P0EEUYI8CW8V[PO$@1M.png

K93YY9JQ8H0R[BG2SG(ZEE1.png
首先我们提取道路中线,删除掉一个线,也就是最外围的原始用地线,因为我并不希望我的环岛会出现在外围,然后提取线段的首末点作为点群,再找出离每个点距离最近的点,提取距离小于15m的俩个点,计算俩点的中点做圆,用这个圆和所有的用地布尔交集,如果结果少于4个,就不输出,也是为了防止环岛出现在边缘的位置。

{FLZS[@L}L0PXI{)RFA(CVE.png


最终效果
VW2T9HLH`{V~}QCQ}5H_9~2.png




关于数据分组
也就是怎么处理输入俩个及以上的用地的情况。
ncf出品的绿色的 trim tree还是很给力的,如果是tree就向上砍一级,是list就不操作,因为如果输入一个用地就是list,多个就是tree,这样就能处理多种情况了。

另外一点是怎样让一个分支中的点,去和这个分支的所有点求最近点,这个我没想到太好的解决方办法,就粗暴的一个一个算,所以目前这个能最多输入6块用地,想增加的话就只能手动的增加explode tree 的输出,然后复制一个电池包下来连一下就可以了。
Y`_0R@IOC%II3OR099_`5WM.png
G]~K(H`(FNE@8`%6ICU)UDA.png

应该还有许多问题我没注意到的,欢迎大家多多交流,丰富noah
环岛.gh (776.93 KB, 下载次数: 9)

点评

SDK
看到这个一下子表情就精彩了,太赞了姑娘!  详情 回复 发表于 2019-9-29 19:34
给力!那天超给我看完就眼前一亮,数据这块理的漂亮!  详情 回复 发表于 2019-9-29 17:29
感谢分享!加入环岛确实是对路口过近的不错的处理方法~  详情 回复 发表于 2019-9-28 14:34

评分

参与人数 2强度 +10 照度 +30 收起 理由
skywoolf + 5 + 10 表示赞同!
Supers227 + 5 + 20 感谢分享!

查看全部评分

 楼主| 发表于 2019-9-28 14:34:17 | 显示全部楼层
yexuan 发表于 2019-9-28 13:39
首先感谢ncf的大大们能够抽那么长的时间花心思做这些,而且还免费的开源了,很不容易,致敬!!!

...

感谢分享!加入环岛确实是对路口过近的不错的处理方法~
发表于 2019-9-29 17:29:30 | 显示全部楼层
yexuan 发表于 2019-9-28 13:39
首先感谢ncf的大大们能够抽那么长的时间花心思做这些,而且还免费的开源了,很不容易,致敬!!!

...

给力!那天超给我看完就眼前一亮,数据这块理的漂亮!

点评

多谢祁哥夸奖哈哈哈哈哈  详情 回复 发表于 2019-9-29 22:19
发表于 2019-9-29 19:34:22 | 显示全部楼层
yexuan 发表于 2019-9-28 13:39
首先感谢ncf的大大们能够抽那么长的时间花心思做这些,而且还免费的开源了,很不容易,致敬!!!

...

看到这个一下子表情就精彩了,太赞了姑娘!

点评

额.......我头像引起的误会?  详情 回复 发表于 2019-9-29 22:21
发表于 2019-9-29 22:19:43 | 显示全部楼层
skywoolf 发表于 2019-9-29 17:29
给力!那天超给我看完就眼前一亮,数据这块理的漂亮!

多谢祁哥夸奖哈哈哈哈哈
发表于 2019-9-29 22:21:17 | 显示全部楼层
SDK 发表于 2019-9-29 19:34
看到这个一下子表情就精彩了,太赞了姑娘!

额.......我头像引起的误会?
发表于 2019-9-30 10:29:29 | 显示全部楼层
本帖最后由 kengo 于 2019-9-30 10:31 编辑

关于yexuan的数据分组,我一眼望过去感觉可以优化于是有了下面的内容
环岛-01.png
初始输入端,树型数据直接进入计算,使用duplicate data复制相同数据到每一个分支
环岛-02.png
删除原cluster中的数据拍平的部分,改为清除空数据之后整理路径
环岛-03.png
之后类似的地方依样画葫芦
环岛-04.png
一顿操作猛如虎,最后发现运算效率还不如分拆开来的,这到底是为了什么
级别太低,附件不能大于600k,只好单独上传独立的cluster上来,请大佬评审的时候手动替换一下







环岛(独立component).gh

44.75 KB, 下载次数: 1, 下载积分: 照度 -1 lux

发表于 2019-9-30 10:55:40 | 显示全部楼层
接上面一条,写完了之后我发现似乎是面域求异的时候数据结构有问题,造成了运算时间反而比原来增加了

环岛-05.png 替换掉原来的拍平数据,而改为缩进数据层级参与运算
环岛-06.png
整个修改之后环岛cluster的全貌
环岛-07.png

最后的结果和炸开树的耗时是一样的,而且适用于普遍情况

环岛(独立component)(1).gh

41.91 KB, 下载次数: 1, 下载积分: 照度 -1 lux

点评

太棒了在这么短的时间内又进行了二次更新  详情 回复 发表于 2019-9-30 21:57
这么一改茅塞顿开啊,真的太棒了  详情 回复 发表于 2019-9-30 12:26

评分

参与人数 2强度 +8 照度 +20 收起 理由
skywoolf + 3 + 10 很有启发!
Supers227 + 5 + 10 感谢分享!

查看全部评分

发表于 2019-9-30 12:26:06 | 显示全部楼层
kengo 发表于 2019-9-30 10:55
接上面一条,写完了之后我发现似乎是面域求异的时候数据结构有问题,造成了运算时间反而比原来增加了

替 ...

这么一改茅塞顿开啊,真的太棒了
 楼主| 发表于 2019-9-30 21:57:35 | 显示全部楼层
kengo 发表于 2019-9-30 10:55
接上面一条,写完了之后我发现似乎是面域求异的时候数据结构有问题,造成了运算时间反而比原来增加了

替 ...

太棒了在这么短的时间内又进行了二次更新
发表于 2019-10-1 15:58:35 | 显示全部楼层
国庆节为人民服务!
noah_1.JPG
Primary Interface
noah_1_1.JPG
Secondary Interface
noah_1_2.JPG
Tertiary Interface
加了一个小旋转,结果还蛮有趣。

noah_1_3.JPG
road_network_rotation.gh (668.12 KB, 下载次数: 0)

点评

这个思路改动不大但很巧妙,很有启发哈,感谢分享。我上调了gh格式文件的上传大小限制,现在应该能好些。貌似这套老站系统对境外不是那么友好,很慢。  详情 回复 发表于 2019-10-2 20:45
GH附件稍微超过了 1mb 所以无法上传,希望能有一种更方便的共享代码方式  详情 回复 发表于 2019-10-2 11:18

评分

参与人数 2强度 +8 照度 +40 收起 理由
skywoolf + 3 + 30 很有启发!
Supers227 + 5 + 10 感谢分享!

查看全部评分

发表于 2019-10-2 11:18:40 | 显示全部楼层
元子Leo 发表于 2019-10-1 15:58
国庆节为人民服务!

Primary Interface

GH附件稍微超过了 1mb 所以无法上传,希望能有一种更方便的共享代码方式

点评

那就百度云链接吧  详情 回复 发表于 2019-10-2 11:31
发表于 2019-10-2 11:31:38 | 显示全部楼层
元子Leo 发表于 2019-10-2 11:18
GH附件稍微超过了 1mb 所以无法上传,希望能有一种更方便的共享代码方式

那就百度云链接吧
发表于 2019-10-2 11:49:01 | 显示全部楼层
https://we.tl/t-33MXf5QCa6

试试这个链接,我没法用百度云
发表于 2019-10-2 20:45:20 | 显示全部楼层
元子Leo 发表于 2019-10-1 15:58
国庆节为人民服务!

Primary Interface

这个思路改动不大但很巧妙,很有启发哈,感谢分享。我上调了gh格式文件的上传大小限制,现在应该能好些。貌似这套老站系统对境外不是那么友好,很慢。

小黑屋|手机版|NCF参数化建筑论坛 ( 辽ICP备12011358号-1 )    辽公网安备 21020302000097号

GMT+8, 2019-10-15 10:50 , Processed in 0.279253 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表