Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 21.05.2019
Сообщений: 5

ООП. Геометрические фигуры

10.02.2020, 17:52. Показов 5978. Ответов 27

Студворк — интернет-сервис помощи студентам
Классическая задачка на абстрактные классы: создать абстрактный класс Figure, напихать туда чисто виртуальных методов аля Draw(), Rotate(), Expand() и так далее, унаследоваться от него всякими Line, Triangle, реализовать методы абстрактного класса, запихать адреса потомков в вектор указателей родительского класса и вызывай себе из него методы.

Но вот задумался: по сути дела у нас может быть Point - класс, описывающий точку как геом. фигуру. И вот её крутить и деформировать, как по мне, абсолютно бесполезно. И что же это выходит - придется пилить отдельный класс FigureWithoutRotate или лепить мелкие интерфейсы аля IDraw(), IRotate(), IExpand(), где надо их реализовать. Но тогда фиг запихнёшь все твои точки и треугольники в один вектор. Можно вообще продолжать наследоваться от Figure, а для неугодных методов делать пустую реализацию и/или кидать их в приватную секцию. Короче ступор.

Как же тогда поступить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.02.2020, 17:52
Ответы с готовыми решениями:

Классическая задача ООП: геометрические фигуры
Решить эту задачу не составляет труда, сталкивался с ней уже. Самому интересно взглянуть чужой код, а лучше посмотреть решение...

[ООП] Геометрические функции
Очередное задание по ООП (наследование): Используя метод декомпозиции реализовать геометрические функции + значение площадей этих фигур. ...

ООП . Геометрические тела
Здравствуйте , нужна ваша помощь . Дан класс Geometric_object . И у него есть два подкласса Plane_figure_2d и Volumetric_body_3d , и у...

27
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
11.02.2020, 18:12
Студворк — интернет-сервис помощи студентам
zayats80888, почему именно относительно начала координат. Вы же для поворота ввели originX и originY. Как я понимаю это точка, вокруг которой осуществляется поворот, т.е. центр трансформации. Почему бы и для масштабирования не сделать тоже самое
C++
1
2
3
4
5
// ...
 
void scale(double factorX, double factorY, double originX, double originY) override;
 
// ...
Второй момент. Зачем центру окружности или вершинам треугольника метод draw()? Ведь это вроде как раз и есть проблема, которая мучает ТС.
1
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
11.02.2020, 18:20
Цитата Сообщение от fao Посмотреть сообщение
Почему бы и для масштабирования не сделать тоже самое
Хотите сделайте, но в целом можно обойтись и без центра преобразования, как для поворота, так и для масштабирования. Можно просто комбинировать с параллельным переносом.
Цитата Сообщение от fao Посмотреть сообщение
Второй момент. Зачем центру окружности или вершинам треугольника метод draw()? Ведь это вроде как раз и есть проблема, которая мучает ТС.
У него нет задачи что либо рисовать, метод draw может выглядеть так:

C++
1
2
3
4
5
6
void Circle::draw()
{
    std::cout << "Окружность с центром ";
    center.draw();
    std::cout << "и радиусом " << radius << std::endl;
}
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.02.2020, 19:17
Цитата Сообщение от zayats80888 Посмотреть сообщение
У него нет задачи что либо рисовать, метод draw может выглядеть так:
С чего Вы взяли? Может звездочками(*) нужно рисовать в консоли.
1
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
11.02.2020, 19:32
Цитата Сообщение от Avazart Посмотреть сообщение
С чего Вы взяли?
Цитата Сообщение от Chupakabra0_0 Посмотреть сообщение
Классическая задачка на абстрактные классы
Цитата Сообщение от Avazart Посмотреть сообщение
Может звездочками(*) нужно рисовать в консоли.
Тогда это задача для других абстракций, например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct vertex;
 
enum class Primitive_type
{
    Points,
    Lines,
    Line_strip,
    Triangles,
    Triangle_strip
    //...
};
class framebuffer
{
    //...
public:
    void draw(const std::vector<vertex>& buf, Primitive_type pt);
};
1
0 / 0 / 0
Регистрация: 21.05.2019
Сообщений: 5
11.02.2020, 19:48  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
С чего Вы взяли? Может звездочками(*) нужно рисовать в консоли.
Поправочка: рисовать надо. Но с этим проблем нет, слава SFML, которой разрешили воспользоваться.
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
11.02.2020, 19:53
Цитата Сообщение от Chupakabra0_0 Посмотреть сообщение
рисовать надо. Но с этим проблем нет, слава SFML, которой разрешили воспользоваться.
Ну так там всё есть, ничего выдумывать не нужно
0
0 / 0 / 0
Регистрация: 21.05.2019
Сообщений: 5
11.02.2020, 20:04  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ну так там всё есть, ничего выдумывать не нужно
Так точно, но вот была проблема с схемой наследования. А то потом преподаватель такой: "А почему ваша точка не крутиться?" Лучшим наверное способов решения будет просто не делать точку отдельной фигурой. И так круг есть
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
11.02.2020, 20:15
Цитата Сообщение от Chupakabra0_0 Посмотреть сообщение
А то потом преподаватель такой: "А почему ваша точка не крутиться?"
И правильно скажет. В графике точку можно рисовать, крутить, масштабировать, и т.д. (подвергать любым афинным преобразованиям). Там по сути ничего кроме точек(вершин) и нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2020, 20:15

ООП . Геометрические тела
Здравствуйте , нужна ваша помощь . Дан класс Geometric_object . И у него есть два подкласса Plane_figure_2d и Volumetric_body_3d , и у...

Геометрические фигуры
Доброго времени суток, господа. Возник вопрос. Подскажите, какие функции в с++ используются для рисования простейших геометрических фигур....

с++ нарисовать геометрические фигуры
Как сделать программу которая выведет на экран геометрическую фигуру: 1.квадрат 2.треугольник 3.прямоугольник Модификации: _НА...

Геометрические фигуры циклом С++
Здравствуйте мне нужно сделать квадрат и треугольник, перевернутый треугольник при этом вводя ширину и высоту и чтоб они были пустые...

Геометрические фигуры: реализовать наследование с полиморфизмом
Здравствуйте, Помогите пожалуйста реализовать следующую идею: Есть общий класс: фигура Его подклассы: Окружность, треугольник ...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru