计算覆盖双倍直径圆的圆的坐标

Calculate coordinates of circles covering a circle with double diameter

这就是我要实现的目标:

那么给定灰色圆心坐标x=ax=b以及直径d,那么其他6个直径为d/2的圆心坐标是多少?

注意6个圈加上中间的第7个圈,覆盖了所有灰色圈的区域。

我正在尝试用 JavaScript 计算它,我可能可以从任何其他语言移植它。

鉴于您有 6 cicles and 360 degree,您可以从灰色圆圈边界的任意点开始(即第一个圆圈的中心)。并且每次旋转这个点 60° 每次找到其他圆心。

示例。

  • 灰色圆圈中心点为:cx=0 & cy=0 with a ray R=2

  • 在你的灰色圆圈的边界处取一个点,cx1=R && cy1=0 示例

现在你有了第一个中心点 (R,0),你把这个点绕灰色圆圈旋转 60°,所以使用旋转公式:

x' = x*cos(theta)-y*sin(theta)

y' = y*sin(tetha)+x*cos(theta)

新点将是:

cx2 = cx1*cos(60) - cy1*sin(60) = R/2 = 1
cy2 = cy1*sin(60) + cx1*cos(60) = R/2 = 1

依此类推,直到找到所有中心 (cxk,cyk) where k in [1..6]

中心有一个 d/2 直径的圆,它有一个内接六边形,六边形边缘位于该圆与外部 d/2 圆的交点处。 对于外 d/2 个圆,它们的中心坐标偏移量为:2 x 从主圆中心到六边形边(半径内)的距离,并考虑角度旋转。

编辑: 对不起,如果数学太多,但应该是这样的:
小圆径为半圆径:d=D/2
六角边:s= d/2
六边形半径:(d/2) * sqrt(3)/2
偏移量:(d/2)*sqrt(3)
所以坐标是,考虑到大圆的中心 0,0:
左:-(d/2)*sqrt(3), 0
左上:-(d/2)*sqrt(3)*cos60, (d/2)*sqrt(3)*cos30
右上:(d/2)*sqrt(3)*cos60, (d/2)*sqrt(3)*cos*30
右:+(d/2)*sqrt(3), 0
右下:(d/2)*sqrt(3)*cos60, -(d/2)*sqrt(3)*cos*30
左下:-(d/2)*sqrt(3)*cos60, -(d/2)*sqrt(3)*cos30