|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
|
|
Классы геометрических фигур17.06.2019, 23:31. Показов 13819. Ответов 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!!! движение геометрических фигур Иерархия геометрических фигур в ООП Вычисление площадей геометрических фигур Графика - построение геометрических фигур Вывод на экран геометрических фигур Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|