计算覆盖双倍直径圆的圆的坐标
Calculate coordinates of circles covering a circle with double diameter
这就是我要实现的目标:
那么给定灰色圆心坐标x=a
和x=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
这就是我要实现的目标:
那么给定灰色圆心坐标x=a
和x=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