【发布时间】:2018-10-05 19:57:04
【问题描述】:
如图所示,我有一个大圆圈和几个小圆圈
首先我像这样画中间的小圆圈:
cxSmallMiddle = cxBig + radiusBig + hDist + radiusSmall;
sySmallMiddle = radiusBig;
cxBig 是大圆的中心。 hDist 是我希望每个小圆圈到大圆圈的距离。
所以现在中间小圆的中点与大圆的中点平行。
现在我想用大圆的hDist和中间小圆的vDist(垂直距离)绘制下一个小圆。
这样hDist 和vDist 将相应地控制小圆圈与大圆圈的距离以及小圆圈之间的间隙。
如何找到其他按钮的 cx 和 cy?
编辑:添加了@Gene建议的代码
@Override
public void onDraw(Canvas canvas) {
float radiusBig = 110f * singleDp;
float cxBig = screenWidth / 2f;
//float cyBig = screenHeight / 2f;
float cyBig = radiusBig + strokeWidth + (20*singleDp);
canvas.drawCircle(cxBig, cyBig, radiusBig, paint);
float radiusSmall = 20 * singleDp;
float vDist = 0 * singleDp;
float hDist = 0 * singleDp;
float acPoint = radiusBig;
float bcPoint = radiusSmall + vDist;
float theta = (float) Math.acos(bcPoint / acPoint);
int i = 0;
double x_i = acPoint * Math.cos(i * theta) + cxBig;
double y_i = acPoint * Math.sin(i * theta) + cyBig;
canvas.drawCircle((float) x_i, (float) y_i, radiusSmall, paint);
i = 1;
x_i = acPoint * Math.cos(i * theta) + cxBig;
y_i = acPoint * Math.sin(i * theta) + cyBig;
canvas.drawCircle((float) x_i, (float) y_i, radiusSmall, paint);
}
我用这段代码做了很多实验,这就是我得到的。当我画i=0 时,距离i=0 几乎是 45 度。在试验时,我发现如果我指定vDist = 80;然后看起来没问题。 vDist 越大,越接近i=0。
【问题讨论】:
-
那么距离就是各个圆的切线之间的距离?您是否有理由不只是想做一些极坐标逻辑,即给出一系列角度和与大圆中心的距离?然后每一个小圆圈都将均匀分布,并且都与大圆圈的中心等距。我假设您想在较大的圆圈周围绘制几个较小的圆圈,也许这是不对的
-
我将在大圆圈的左右两侧绘制 5 个圆圈。是的,切线。我不想做角度,因为距离可以改变,大小圆的大小也可以改变,小圆之间的间隙也可以改变。我还添加了一张照片@MattMessersmith
标签: algorithm math trigonometry