|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
|
|
Классы геометрических фигур17.06.2019, 23:31. Показов 13865. Ответов 26
Всем привет! У меня возникли сложности с пониманием и реализацией задания.
Имеется задание (надеюсь перевести не составит труда): Design a small program in C++ that would implement the following: 1. Support a few types of 3D geometric curves – circles, ellipses and 3D helixes. (Simplified definitions are below). Each curve should be able to return a 3D point and a first derivative (3D vector) per parameter t along the curve. 2. Populate a container (e.g. vector or list) of objects of these types created in random manner with random parameters. Ensure that the container will contain objects of all supported types. 3. Print coordinates of points and derivatives of all curves in the container at t=PI/4. 4. Populate a second container that would contain only circles from the first container. Make sure the second container shares (i.e. not clones) circles of the first one, e.g. via pointers. 5. Sort the second container in the ascending order of circles’ radii. That is, the first element has the smallest radius, the last - the greatest. 6. Compute the total sum of radii of all curves in the second container. Additional optional requirements: 7. Split implementation into a library of curves and executable which uses API of this library. Expectations to the implementation: 1. The implementation must use virtual methods. 2. Has neither explicit memory deallocation nor memory leaks. 3. Curves must be physically correct (e.g. radii must be positive). 4. Containers and sorting must be implemented using STL (C++ Standard Template Library). 5. The implementation may use constructs of C++11 or higher. 6. The code must compile with any compiler of your choice (gcc, Visual C++, etc). 7. The result should be sent via email or posted on github. The delivery must contain source code only (no compiled binaries): *.h and *.cpp files and project files, so that we can compile the result by ourselves. Curve definitions: - All curves are parametrically defined, i.e. a point is calculated using some C(t) formula. - Circle is planar in the plane XoY (i.e. all Z-coordinates are 0) and is defined by its radius. - Ellipse is planar in the plane XoY and is defined by its two radii, along X and Y axes. - Helix is spatial and is defined by its radius and step (see the figure below). It takes 2 * PI in parametric space to make a round, i.e. any point on helix satisfies the condition C(t + 2*PI) = C(t) + {0, 0, step}. Прошу помощи опытных людей растолковать нюансы разработки данной программы, такие как: -Каждая кривая должна иметь возможность возвращать 3D-точку и первую производную (3D вектор) по параметру t вдоль кривой; -Заполните контейнер (например, вектор или список) объектами этих типов, созданных случайным образом с помощью случайных параметров. Убедиться, что контейнер будет содержать объекты всех поддерживаемых типов. Соответственно появился довольно смешной вопрос: Как заполнить контейнер, например вектор, объектами всех поддерживаемых типов (я так понял окружность, элипс, спираль)? Как заполнить контейнер случайным образом? и др. Возможно кто-то встречал подобные задачи и есть какой либо пример. Примеры Классов окружность, элипс, спираль. На работу выделено время - 7 дней. Очень прошу дать какую-либо информацию. Задание очень важное для меня. Если есть дополнительные вопросы по задаче, прошу - задавайте. Пока что каких-либо наработок нет, когда сделаю хоть что-нибудь, обязательно выложу сюда. Спасибо за внимание!
0
|
|
| 17.06.2019, 23:31 | |
|
Ответы с готовыми решениями:
26
Масштабирование геометрических фигур Вывод геометрических фигур |
|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
|
| 17.06.2019, 23:42 | |
|
Как заполнить вектор всеми поодерживаемыми типами? Ответ: реализуете базовый класс фигуры и наследуете все остальные от него, создаете вектор указателей на базовый класс, проходя по нему с помощью dynamic_cast приводите к нужному типу
Добавлено через 3 минуты Аналогично примерно и с рандомным заполнением, рандомите число от 0;2 в цикле и создаете объект такого типа, после указатель на него заносите в вектор
2
|
|
|
Just Do It!
|
||||||||
| 18.06.2019, 00:12 | ||||||||
2
|
||||||||
|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
|
| 18.06.2019, 07:45 | |
|
XLAT, я просто слишком впритык принял определние объектов и решил, что речь про ооп, вот и предложил решение в этом духе)
1
|
|
|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
|
||||||
| 18.06.2019, 23:19 [ТС] | ||||||
|
Сделал следующее: базовый класс, от которого наследуются остальные Circle, Ellipse, Helix.
Следовал определениям кривых из задачи: - Окружность плоская в плоскости XoY (т. е. все z-координаты равны 0) и определяется ее радиусом. - Эллипс является плоским в плоскости XoY и определяется двумя его радиусами, вдоль осей X и Y. - Спираль является пространственной и определяется ее радиусом и шагом (см. рисунок ниже). Не понял что делать со следующими требованиями: -Каждая кривая должна иметь возможность возвращать 3D-точку и первую производную (3D-вектор) по параметру t вдоль кривой. - Все кривые параметрически определены, т. е. точка вычисляется по некоторой формуле C(t). - Для спирали: Требуется 2 * PI в параметрическом пространстве, чтобы сделать раунд, т. е. любая точка на спирали удовлетворяет условию C(t + 2*PI) = C(t) + {0, 0, step}. Создал массив указателей на объекты базового класса, и попытался присвоить указателям адреса Circle, Ellipse, и Helix. Выпадает ошибка. Попробовал создать вектор объектов базового класса (threeDShape) и заполнить разными объектами - кругом, эллипсом и спиралью, всё отлично работает. Но вот как сюда приплести указатели пока не додумался. Не могли бы вы посмотреть данный код, указать на мои ошибки и дать совет. Спасибо.
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||
| 19.06.2019, 00:18 | ||||
|
Добавлено через 3 минуты Базовый нужно сделать абстрактным Добавлено через 1 минуту и т.д.
1
|
||||
|
Just Do It!
|
||||||
| 19.06.2019, 00:26 | ||||||
|
Кирилл2738,
подправил чуть шоб скомпилилось:
1
|
||||||
|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
|
|||
| 19.06.2019, 01:04 [ТС] | |||
|
Я так понимаю из базового класса убрать x,y,z и добавить только параметр t. Таким образом получиться, что в производном классе, например в окружности, мы добавляем x,y,z и радиус. Радиус будет вводиться, z по условиям задачи равно 0, а x и y рассчитывается с использованием параметрической функции. Посмотрел уравнение некоторых кривых в параметрической форме, и для окружности выходит так: x = r * cos (t), y = r * sin(t), 0 <= t <= 2* Pi Следовательно сделать подобное и к другим производным классам. Соответственно не забывая использовать визуальную функцию (virtual methods). Что касается Containers and sorting must be implemented using STL (C++ Standard Template Library), до этого я пока что не дошёл, необходимо правильно сделать базовый класс и производные. Ещё раз спасибо за ответ, если не сложно поправьте меня если я ошибся. Добавлено через 1 минуту
0
|
|||
|
Just Do It!
|
||||||
| 19.06.2019, 01:11 | ||||||
|
Кирилл2738, добавим чуть полиформизма:
1
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 19.06.2019, 01:13 | |||
|
1
|
|||
|
Just Do It!
|
||||||
| 19.06.2019, 01:54 | ||||||
|
добавим рандома:
* выше по треду, там очепятка:
1
|
||||||
|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
|
||||||||
| 19.06.2019, 01:58 [ТС] | ||||||||
|
Print coordinates of points and derivatives of all curves in the container at t=PI/4. Все остальное ,про параметрические функции, я правильно написал? Добавлено через 58 секунд Добавлено через 1 минуту
0
|
||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 19.06.2019, 02:11 | |||||||
|
Кирилл2738, начните с чего нибудь такого
0
|
|||||||
|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
|
|||
| 19.06.2019, 02:17 [ТС] | |||
|
0
|
|||
| 19.06.2019, 02:29 | |
|
0
|
|
|
Just Do It!
|
|
| 19.06.2019, 02:40 | |
|
чтобы без разночтений,
вот яндекс-перевод: Кликните здесь для просмотра всего текста
Разработать небольшую программу на C++, которая будет выполнять следующие: 1. Поддержка нескольких типов 3D геометрических кривых-круги, эллипсы и 3D спирали. (Упрощенный определения приведены ниже). Каждая кривая должна иметь возможность возвращать 3D-точку и первую производную (3D вектор) по параметру t вдоль кривой. 2. Заполните контейнер (например, вектор или список) объектов этих типов, созданных случайным образом с помощью случайные параметры. Убедитесь, что контейнер будет содержать объекты всех поддерживаемых типов. 3. Вывести координаты точек и производные всех кривых в контейнере при t=PI / 4. 4. Заполните второй контейнер, который будет содержать только круги из первого контейнера. Убедитесь, что второй контейнер разделяет (т. е. не клоны) круги первого, например, через указатели. 5. Отсортируйте второй контейнер в порядке возрастания радиусов окружностей. То есть первый элемент имеет наименьший радиус, последний-наибольший. 6. Вычислить общую сумму радиусов всех кривых во втором контейнере. Дополнительные требования: 7. Разделите реализацию на библиотеку кривых и исполняемый файл, который использует API этой библиотеки. Ожидания в отношении осуществления: 1. Реализация должна использовать виртуальные методы. 2. Не имеет ни явного освобождения памяти, ни утечек памяти. 3. Кривые должны быть физически правильными (например, радиусы должны быть положительными). 4. Контейнеры и сортировка должны быть реализованы с помощью STL (стандартная библиотека шаблонов C++). 5. Реализация может использовать конструкции C++11 или выше. 6. Код должен компилироваться с любым компилятором по вашему выбору (gcc, Visual C++ и т. д.). 7. Результат должен быть отправлен по электронной почте или размещен на GitHub. Поставка должна содержать только исходный код (нет скомпилированных двоичных файлов):*.h и *.cpp-файлы и файлы проекта, так что мы можем скомпилировать результат сами. Определения кривых: - Все кривые параметрически определены, т. е. точка вычисляется по некоторой формуле C(t). - Окружность плоская в плоскости XoY (т. е. все z-координаты равны 0) и определяется ее радиусом. - Эллипс является плоским в плоскости XoY и определяется двумя его радиусами, вдоль осей X и Y. - Спираль является пространственной и определяется ее радиусом и шагом (см. рисунок ниже). Он принимает 2 * Пи внутри параметрическое пространство для округления, т. е. любая точка на спирали удовлетворяет условию C (t + 2*PI) = C (t) + {0, 0, шаг}.
0
|
|
|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
|
|
| 19.06.2019, 22:29 [ТС] | |
|
Добрый вечер!
Возникло недопонимание. Если каждая кривая должна иметь возможность возвращать не только 3D-точку по параметру t, но и первую производную (3D-вектор) при том же параметре, то как понять следующее: Для окружности производная при любом значении t будет такой - Вообщем не понимаю по по поводу этого вектора. Объясните, пожалуйста, кому не трудно! Спасибо большое.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 19.06.2019, 22:48 | |
|
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 20.06.2019, 11:50 | |||||||
|
По отсутствию реакции, предположу что проблема так и не решена.
Предлагаю ознакомится с моим вариантом решения этого задания(выполнено практически полностью, комментарии я расставил, если что не понятно - спрашивайте, хотя я старался лишнего не городить, код простой). Может что то улучшите в нем. Что НЕ сделано: 2. Populate a container (e.g. vector or list) of objects of these types created in random manner with random parameters. Ensure that the container will contain objects of all supported types. Additional optional requirements: 7. Split implementation into a library of curves and executable which uses API of this library. Так же, из за отсутствия интерфейса пользователя(да и код учебный) не отлавливал исключения(по хорошему надо) Перечитав задание, понял что "опорная" точка в базовом классе не нужна, можно вырезать, если хочется. Сам код: Кликните здесь для просмотра всего текста
Тут можно запустить: https://rextester.com/DTQM11204
2
|
|||||||
| 20.06.2019, 11:50 | |
|
Помогаю со студенческими работами здесь
20
HELP!!! движение геометрических фигур Иерархия геометрических фигур в ООП Вычисление площадей геометрических фигур Графика - построение геометрических фигур Вывод на экран геометрических фигур Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|