我已经为此工作了大约一个小时,但我不知道自己在做什么错。这是该问题的问题说明:
这些是给我的一些提示:
到目前为止,这是我创建的代码。输入4个圆仅在屏幕上绘制3个,第三个圆部分不在屏幕上。圆也不接触,这对我来说是没有意义的,因为将下一个圆的中心上下移动直径的长度应使两个圆接触。这是我的代码:
#include <graphics.h>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
int foreColor;
int diagLength;
int radius,diameter;
int centerX = 0, centerY = 0;
int numCircles; // number of circles.
int width, height; // screen width and height
cout << "Enter number of circles: ";
cin >> numCircles;
width = getmaxheight();
height = getmaxheight();
initwindow(width, height, "Circles");
diagLength = sqrt((width * width) + (height * height));
diameter = diagLength / numCircles;
radius = diameter / 2;
centerX = radius;
centerY = radius;
for (int i = 1; i <= numCircles; i++)
{
foreColor = i % 16; // 0 <= foreColor <= 15
setcolor(foreColor);
setfillstyle(i % 12, foreColor); // Set fill style
fillellipse(centerX, centerY, radius, radius);
centerX = centerX + diameter;
centerY = centerY + diameter;
}
getch(); // pause for user
closegraph();
}
最佳答案
这是我认为您想要的图表:
基本问题归结为确定
D
是多少直径很容易。首先使用毕达哥拉斯定理计算对角线的长度
L
,然后除以所需的圆数N
。当然,如果您需要半径,只需再除以2。L = Sqrt(Width * Width + Height * Height);
D = L / N;
计算圆心位置的技巧是要认识到X沿X轴均匀分布,并且与Y坐标相同-因此,您可以真正轻松地计算出我标记为
Dx
和Dy
的距离同一部门:Dx = Width / N;
Dy = Height / N;
从那里可以轻松地计算出每个圆的中心:
for (i = 0; i < N; i++)
{
centerX = (Dx / 2) + i * Dx;
centerY = (Dy / 2) + i * Dy;
/* Draw the circle at (centerX, centerY) with diameter D */
}
这里的所有都是它的!
顺便说一句,如果您想知道为什么代码将圆画得比应该画的更远,那是因为您在
D
和centerX
中添加了centerY
而不是Dx
和Dy
。