NCF参数化建筑论坛

标题: 【Noah.】任务发布 - 路网生成 [打印本页]

作者: Supers227    时间: 2019-9-25 15:46
标题: 【Noah.】任务发布 - 路网生成
请先仔细阅读开源Noah.开源公测任务书
从0927起至1015截止, 我们针对道路生成进行开发任务发布。所有参与任务均在该贴下直接回复!

我们的现有算法提供的是一种思维框架,例如“道路生成”仅是一种思路,而不是所有思路,希望大家提供自己的想法,一起交流分享,并不断丰富这个框架。
[attach]51985[/attach]
发布地址:http://www.ncf-china.com/forum.php?mod=viewthread&tid=55189

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协同开发者小组。

作者: yexuan    时间: 2019-9-28 13:39
本帖最后由 yexuan 于 2019-9-28 13:43 编辑

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


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

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

[attach]52002[/attach]
首先将用地范围炸开,在最长的线段上的0.2到0.7的范围内随机取点的法向平面,求这个平面与用地的交点然后连线,将用地分为俩块,然后俩块用地范围线重复上述操作,重复一定次数形成路网。
[attach]52003[/attach][attach]52005[/attach]
但由于生成路网的点都是在0.2到0.7的范围内取值,所以难免存在有一些点会靠的很近,也就是俩个路口距离很近,比如下图生成的路网,最近的俩个点只有9米,这无疑是一段不合理的道路。

[attach]52006[/attach]



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

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



[attach]52007[/attach]

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

[attach]52012[/attach]


最终效果
[attach]52010[/attach]




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

另外一点是怎样让一个分支中的点,去和这个分支的所有点求最近点,这个我没想到太好的解决方办法,就粗暴的一个一个算,所以目前这个能最多输入6块用地,想增加的话就只能手动的增加explode tree 的输出,然后复制一个电池包下来连一下就可以了。
[attach]52014[/attach]
[attach]52011[/attach]

应该还有许多问题我没注意到的,欢迎大家多多交流,丰富noah
[attach]52023[/attach]





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

...

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

...

给力!那天超给我看完就眼前一亮,数据这块理的漂亮!
作者: SDK    时间: 2019-9-29 19:34
yexuan 发表于 2019-9-28 13:39
首先感谢ncf的大大们能够抽那么长的时间花心思做这些,而且还免费的开源了,很不容易,致敬!!!

...

看到这个一下子表情就精彩了,太赞了姑娘!
作者: yexuan    时间: 2019-9-29 22:19
skywoolf 发表于 2019-9-29 17:29
给力!那天超给我看完就眼前一亮,数据这块理的漂亮!

多谢祁哥夸奖哈哈哈哈哈
作者: yexuan    时间: 2019-9-29 22:21
SDK 发表于 2019-9-29 19:34
看到这个一下子表情就精彩了,太赞了姑娘!

额.......我头像引起的误会?
作者: kengo    时间: 2019-9-30 10:29
本帖最后由 kengo 于 2019-9-30 10:31 编辑

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








作者: kengo    时间: 2019-9-30 10:55
接上面一条,写完了之后我发现似乎是面域求异的时候数据结构有问题,造成了运算时间反而比原来增加了

[attach]52033[/attach]替换掉原来的拍平数据,而改为缩进数据层级参与运算
[attach]52034[/attach]
整个修改之后环岛cluster的全貌
[attach]52035[/attach]

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

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

替 ...

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

替 ...

太棒了在这么短的时间内又进行了二次更新
作者: 元子Leo    时间: 2019-10-1 15:58
国庆节为人民服务!
[attach]52042[/attach]
Primary Interface
[attach]52039[/attach]
Secondary Interface
[attach]52040[/attach]
Tertiary Interface
加了一个小旋转,结果还蛮有趣。

[attach]52041[/attach]
[attach]52043[/attach]







作者: 元子Leo    时间: 2019-10-2 11:18
元子Leo 发表于 2019-10-1 15:58
国庆节为人民服务!

Primary Interface

GH附件稍微超过了 1mb 所以无法上传,希望能有一种更方便的共享代码方式
作者: yexuan    时间: 2019-10-2 11:31
元子Leo 发表于 2019-10-2 11:18
GH附件稍微超过了 1mb 所以无法上传,希望能有一种更方便的共享代码方式

那就百度云链接吧
作者: 元子Leo    时间: 2019-10-2 11:49
https://we.tl/t-33MXf5QCa6

试试这个链接,我没法用百度云
作者: skywoolf    时间: 2019-10-2 20:45
元子Leo 发表于 2019-10-1 15:58
国庆节为人民服务!

Primary Interface

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




欢迎光临 NCF参数化建筑论坛 (http://bbs.ncf-china.com/) Powered by Discuz! X3.2