Я работаю над этим уже около часа и не могу понять, что я делаю неправильно. Это постановка задачи:
Нарисуйте серию кругов вдоль одной диагонали окна. Круги
должны быть разных цветов и каждый круг должен касаться (но не
перекрытие) выше и ниже. Разрешить пользователю программы
определить, сколько кругов нужно нарисовать.
Вот некоторые подсказки, которые мне дали:
Вы найдете геометрию, используемую для размещения геометрических элементов на
диагонали легче, если вы сделаете свое окно квадратным. Вместо того, чтобы использовать
getmaxheight () и getmaxwidth (), рассмотрите возможность использования getmaxheight () для
оба размера.
Не забывайте теорему Пифагора при расчете расстояний в
ваш код, такой как длина диагонали. Имейте в виду, хотя,
что единицы на экране являются пикселями, поэтому дроби в
расчеты не слишком полезны. Это определенно место для
целочисленная арифметика.
Используйте количество элементов, которые вы собираетесь нарисовать (квадраты, круги,
и т. д.) разделить общую длину на шаги, чтобы ваши петли работали
с.
Используйте для циклов для рисования фигур, когда вы знаете, сколько рисовать и что
Размер они должны быть. Определите количество и размер перед циклом.
Пока это код, который я создал. При вводе 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();
}