NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 70157|回复: 56
打印 上一主题 下一主题

[心得体会] 拓展思路——纯gh的2维凸包算法

[复制链接]
跳转到指定楼层
1m
发表于 2011-5-6 11:43:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
凸包也是个经典话题了吧。gh里的convex hull电池自从我在使用中遇到bug后,就对其失去了信任,后来便想尽各种办法绕开这个电池。其实自己动手做,锻炼思考的能力,不算是困难的事情。这个帖子也算是自己做个小小总结,并且我相信做法(纯gh)绝对不止我这一种。 那么如何用gh电池实现2维凸包?一步步来,我们先看一个简单的例子: 现在这里有六个点,顺序可能是随机乱点的,要用它们作控制点生成一个闭合曲线,不理好点序就不对了,也就是说,这里还没有“包”,只是“凸”的问题。 这些点本身顺序是不对的,似乎也难以找到内部的线索去整理它们,那么我可不可以利用外力?如果有一个外部的有序的对象作为参考,然后将这些点按照外部的顺序去整理一下,便该能达到目标。循此思路,我就着各点向外一些先作了一个相似的多段线图案: 以原始无序点向着外围有序点的最小距离为线索,找到离外围每个点最近的内部点,这样把得到的六组单个点再拍平一下顺序就可以得到整理,问题得到了初步解决。 然而,若是应对大量成组数据,手工画多边形就捉襟见肘了。但是从这个方法里得到了启发,我可以将手工画的多边形转为生成的外围圆,方法很简单,找到所有点的中心点,再指定一个能涵括所有点的半径即可: 我把每个原始点都投到了圆上,好处是可以得到一些t值,这些t值显然是有序的,用它们可以轻松为我的原始点排序,至此,“凸”的问题算是得到了较为满意的解答。 现在我们可以把问题上升到一般化,将“包”的问题也加进来。我任意点了24个点如下: 如果过两两点连线,可以得到一个线图,这个线图中最外围的多边形框就是我们想要的东西: 接下来怎么进行呢?简单地说,就是必须把复杂问题转化为简单问题,既然我已经知道了怎么做“包”,如果可以把包在多边形框内部的点都投到多边形框上,问题就能回到上一步: 于是就可以继续借助在外围做圆的方法,先把所有点都投到圆上,然后连接每个投影点与对应的原始点,得到24条切割线,用这些线切割此前两两点连线得到的线图中的线,得到的交点中,容易发现距离投影点最近的点就是我们需要的点: 在这24个交点里,如果是作为多边形框的原始角点得到的交点,很明显既是角点本身!这么一来就简单了,只需要通过布尔运算抽出原始点与交点里重合的点就能得到凸包多边形的角点: 然后就只要重复上一步“凸”的动作,再一次把角点投到圆上,拿到t值,整理点序,问题即告完满解决: 总之,这是很有意思的一次尝试,也应该可以作为深入学习代码前的热身运动吧。最后gh的文件见附件,象征性收费,不过相信帖子已经讲到如此详细坛友们也不用再看电路图了 (我其实很遗憾在论坛里这样细致的帖子少之又少,是各位高手觉得话讲穿了没意思吗?),分享学习心得,用诚意打动斑竹,呼唤加分加照度。

2d凸包.ghx

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

售价: 2 lux照度  [记录]

评分

参与人数 2强度 +5 照度 +51 收起 理由
pqwpqw12345 + 1 艾尔!我是爱德华啊!哈哈 感谢分享!
skywoolf + 5 + 50 感谢分享

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享
2m
发表于 2011-5-6 18:45:25 | 只看该作者
沙发,学习了......
3m
发表于 2011-5-6 19:55:24 | 只看该作者
很想知道最新版0.8.0010中依然存在bug吗
4m
发表于 2011-5-7 00:08:35 | 只看该作者
效率有点低~~~~~~
5m
发表于 2011-5-7 01:14:42 | 只看该作者
谢楼主分享心得
6m
发表于 2011-5-7 23:08:45 | 只看该作者
好东西,很强大啊,学习学习
7m
发表于 2011-5-7 23:11:00 | 只看该作者
haohaohaohaoahao
8m
发表于 2011-5-8 00:44:43 | 只看该作者
期待更多凸包的建筑实例~~~
9m
发表于 2011-5-12 02:16:34 | 只看该作者
观摩学习一下。。。。。
10m
发表于 2011-5-13 15:10:06 | 只看该作者
支持支持。。。谢谢分享、、、
11m
发表于 2011-5-19 10:18:17 | 只看该作者
很有意思 收藏先
12m
发表于 2011-5-19 13:06:06 | 只看该作者
我是GH初学者,求师傅~不过还是先要赞一个
13m
发表于 2011-5-20 14:31:25 | 只看该作者
quite good!
14m
发表于 2011-5-20 23:38:25 | 只看该作者
学习学习ing
15m
发表于 2011-5-23 14:20:32 | 只看该作者
效率有点低
16m
发表于 2011-5-26 09:55:12 | 只看该作者
it is interesting
17m
发表于 2011-5-28 08:03:09 | 只看该作者
菜鸟路过,学习了
18m
发表于 2011-5-28 08:32:04 | 只看该作者
学习学习....
19m
发表于 2011-5-29 16:19:22 | 只看该作者
学了~~~~~牛啊
20m
发表于 2011-5-30 01:20:54 | 只看该作者
真好,很详细的帖子

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-5-16 15:33 , Processed in 0.361090 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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