Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
6 / 6 / 8
Регистрация: 25.04.2012
Сообщений: 42

Класс "окружность"

14.06.2012, 00:14. Показов 5149. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу работы с окружностями. Окружность является объектом класса. Память под окружность должна выделяться динамически (с помощью new). Должны быть определены деструктор и следующие конструкторы:

· Конструктор по умолчанию создает нулевую окружность;

· Конструктор, задающий окружность по центру и радиусу;

· Копирующий конструктор.

Необходимо написать функцию-член, прорисовывающую окружность и перегрузить оператор присваивания.

Добавлено через 8 часов 54 минуты
Неужто это реально так сложно? Форум перекопал - так про окружности меньше всего отвечают или темы остаются без ответа вовсе. Очень надеюсь что задачка разрешится...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.06.2012, 00:14
Ответы с готовыми решениями:

Создайте класс «Окружность», которая имеет координаты центра и радиус. Создать производный класс – «Сфера»
Создайте класс «Окружность», которая имеет координаты центра и радиус. Создать производный класс – «Сфера». Определить функции печати,...

Создать класс окружность, член класс-радиус R
Создать класс окружность, член класса – радиус R. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – площади, длины ...

Класс окружность
Программа есть, все работает. Класс: #pragma once #include "stdafx.h" class Circle { public: Circle ();

6
28 / 28 / 3
Регистрация: 27.05.2012
Сообщений: 114
14.06.2012, 18:08
Уравнение

x^2 + y^2 + ax + by + c = 0

задает либо окружность, либо точку, либо пустое множество.

Чтобы ответить на вопрос, какой именно случай имеет место для данного конкретного уравнения, надо выделить полные квадраты по x и y.

например, уравнение x^2 + y^2 - 4x + 2y = 0 можно преобразовать так:

(x^2 - 4x + 4) + ( y^2 + 2y + 1) - 5 = 0

(x - 2)^2 + (y + 1)^2 = 5.

Значит получаем что-то типа:

(x - a)^2 + (y + b)^2 = с^2.

a и b центр окружности a = x координата b = y координата
с^2 = радиус окружности в квадрате.

x, y координаты точки лежащей на окружности.

C++
1
2
3
4
float xPoint, yPoint, xCenter, yCenter, radius;
 
radius = (xPoint - xCenter)*(xPoint - xCenter) + (yPoint + yCenter)*(yPoint + yCenter);
radius = sqrt(radius);
Добавлено через 17 часов 21 минуту
Это просто набросок. Но все же лучше, чем вообще ничего! (:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <math.h>
 
class Cycle {
 
private: 
        float xPoint, yPoint, xCenter, yCenter, radius;
 
public:
 
    Cycle()
        {
            PlotCycle(0, 0, 0);
        }
 
    ~Cycle(){}
 
        float PlotCycle(float diametr, float xC, float yC)
        {
            xCenter = xC;
            yCenter = yC;
 
            for(int x = diametr*(-1)+xCenter ; x <= diametr+xCenter; x++) 
                 for(int y = diametr*(-1)+yCenter ; y <= diametr+yCenter; y++)
                       draw((xPoint - xCenter)*(xPoint - xCenter) + (yPoint + yCenter)*(yPoint + yCenter));
                       // функция draw не определена !!! Сам пиши ;)
        }
 
        float GetRadius()
        {
            radius = (xPoint - xCenter)*(xPoint - xCenter) + (yPoint + yCenter)*(yPoint + yCenter);
            return sqrt(radius);
        }
}
1
6 / 6 / 8
Регистрация: 25.04.2012
Сообщений: 42
14.06.2012, 19:14  [ТС]
Ну хотя бы это. Уже неплохо! Респект! Буду думать пока... Надеюсь тут тоже не будут забывать...
0
28 / 28 / 3
Регистрация: 27.05.2012
Сообщений: 114
14.06.2012, 22:53
Существует еще алгоритм Брезенхэма для рисования окружностей. По методу построения он похож на рисование линии. В этом алгоритме строится дуга окружности для первого квадранта, а координаты точек окружности для остальных квадрантов получаются симметрично. На каждом шаге алгоритма рассматриваются три пикселя, и из них выбирается наиболее подходящий путём сравнения расстояний от центра до выбранного пикселя с радиусом окружности.

Эта функция полностью работоспособная:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void drawCircle(int x0, int y0, int radius) {
 
        int x = 0;
        int y = radius;
        int delta = 2 - 2 * radius;
        int error = 0;
 
        while(y >= 0) 
        {
                setPixel(x0 + x, y0 + y);
                setPixel(x0 + x, y0 - y);
                setPixel(x0 - x, y0 + y);
                setPixel(x0 - x, y0 - y);
                error = 2 * (delta + y) - 1;
 
                if(delta < 0 && error <= 0) 
                {
                        ++x;
                        delta += 2 * x + 1;
                        continue;
                }
 
                error = 2 * (delta - x) - 1;
 
                if(delta > 0 && error > 0) 
                {
                        --y;
                        delta += 1 - 2 * y;
                        continue;
                }
 
                ++x;
 
                delta += 2 * (x - y);
 
                --y;
        }
}
При желании ее можно чуть-чуть упростить. Но лучше не стоит. Алгоритм очень оптимальный.

Добавлено через 2 часа 42 минуты
Кстати, когда класс напишешь, кинь мне потестировать. Можно в личку.
1
6 / 6 / 8
Регистрация: 25.04.2012
Сообщений: 42
14.06.2012, 22:55  [ТС]
Хорошо. Думаю завтра на работе будет время позаниматься с классом. Спасибо!
0
81 / 15 / 0
Регистрация: 19.03.2012
Сообщений: 465
Записей в блоге: 1
08.09.2013, 20:03
Bukich, очень нужно решение этой задачки по которой вы общались на сайте по классу "Окружность" у меня тоже 21 вариант)
0
Zebr00
20.09.2013, 12:18
katerinaа, подскажите у вас в итоге появилось решение этого варианта мне он тоже очень нужен спасибо )
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2013, 12:18
Помогаю со студенческими работами здесь

Класс, описывающий окружность
Доброго времени суток! Помогите пожалуйста с написанием программы на основе объектно ориентированного программирования. Задание такое: ...

Создать класс окружность
Написать программу. Задание: Создать класс окружность, член класса – радиус R. Предусмотреть в классе методы вычисления и вывода...

Создать класс «окружность»
Создать класс «окружность». Элементы класса: поле задает значение радиуса окружности; конструктор для инициализации поля; метод...

Описать класс Окружность
Описать класс Окружность. Объявить объект описанного класса. Отразить на экране полученную окружность. Объект переместить, изменить цвет. У...

Составить класс окружность
Составить класс окружность содержащие следующие данные : координаты центра (x;y) , радиус окружности r , функции для ввода и вывода ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru