仓库管理员都知道,相同尺寸的管道可以实现类似无缝堆叠的放置
即6个圆可以紧密环绕一个相同大小的圆
这种两两60度夹角的配置相对简单,直接用三角函数即可计算出来
如果不是6个而是8个圆围绕一个圆紧密排列,该怎么算呢
编程中,数学很重要,不过逻辑更加关键(有些人认为逻辑学是数学的分支,也有人认为是逻辑学造就了数学)
如下图
八个圆互相挤压,必然不能紧贴中心圆,这是很显而易见的
关键有以下几点:
八个圆紧密排列,必然每个圆心都在以中心圆圆心为圆心的大圆上,这一点可以推广到任意多个圆
每个圆的圆心等分360度范围,八个圆则两个相邻圆圆心与中心圆圆心连线的夹角为45度
两个圆相切则两个圆心连线经过切点,即距离为半径之和(相同大小即为直径)
那么剩下的就好办了,如图三角形ABC是以BC为底边的等腰三角形,顶角为45度,底边长为圆的直接
等腰三角形两个底角等大,两条边等长,三角形唯一;已知顶角,底边,三角形大小唯一(可以得出与半径的关系,半径确定,则三角形确定)
利用WORD自带的公式编辑器编辑公式贴上来,整个推导过程
1.余弦定理
2.假设圆被推开的距离为x(即内圆和外圆的距离为直径+2x,方便提取公约数),顶点ABC的对边分别为abc,顶点A的夹角为α,参数为
3.代入余弦定理,交换
4.解关于x的一元二次方程,距离为正数丢弃负值解
5.以直径为168(即半径84)代入函数解得
这里x为内圆与外圆的间距部分的一半,精确值为:
25.751289049615628339958026567884
至此,正向的圆直接按直角偏移算出位置
斜角的圆将世界按矩阵旋转45度再按正向圆渲染即可得到结果
如上图所示