我已经为此工作了大约一个小时,但我不知道自己在做什么错。这是该问题的问题说明:



这些是给我的一些提示:



到目前为止,这是我创建的代码。输入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坐标相同-因此,您可以真正轻松地计算出我标记为DxDy的距离同一部门:
    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 */
    }
    

    这里的所有都是它的!

    顺便说一句,如果您想知道为什么代码将圆画得比应该画的更远,那是因为您在DcenterX中添加了centerY而不是DxDy

    10-04 14:30