昨天群里有个小伙伴问到一个问题,怎么用多段圆弧拟合一条自由曲线,这其实是原厂基础课里的一个小例子,咱们今儿再来看看,其实这个例子的思路还是很值的学习的,从问题本身入手,一步一步突破,这也是grasshopper最接地气的解决问题方式,另外感觉这种需求也是很常见的,毕竟自由曲线虽然好看,但是不适合建造啊。
就该问题有四种解决方案:
1.最简单的思路是在曲线上提取点,根据三点绘制圆弧,来得到拟合曲线的多段圆弧,先对曲线进行等分,注意这里的等分数乘以了2,然后以乘以2之前的等分数为数量,2为公差得到等差数列,这样就得到0,2,4……依此类推的列表,而我们最终要提取的点是(0,1,2)、(2,3,4)、(4,5,6)……三三分组,所以这里用consecutive domain来将列表转换为区间,0-2,2-4,4-6,因为不需要累加,所以A段需要设置为False,然后根据子区间去提取对应的等分点,就得到了每组三个点的树形数据,然后以三点绘制圆弧,最后对圆弧端点进行点标注,圆弧段进行着色,可以清晰看到圆弧的连接;
2.思路2与思路1类似,只是不是以0-2,2-4这样的子区间去提取点,而是以等差数列的每个值作为首项,1为公差,3为数量生成多组等差数列,每组有三个值,分别为(0,1,2)、(2,3,4)、(4,5,6)……这里解释下为啥前面的等分数需要乘以2,因为后边生成的上下段圆弧的重复点只是在端点,所以等差数列要以2为公差得到值作为首项,再提取往后的三个点,理解起来有点绕。以该索引值去提取等分点,就得到了每组三个点的树形数据,然后以三点绘制圆弧;
3.思路3就比较容易理解了,首先还是对区间进行等分,根据等分点t值对曲线打断,提取每段打断线的两个端点和中间点,根据三点生成圆弧;
4.思路4是利用gh现有的运算器PolyArc来直接以点生成相切圆弧,以第一个点和第二个点构建向量用来控制圆弧线的起始方向,以等分点来生成圆弧线。
#grasshopper#