Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.109.171] |
|
Сообщ.
#1
,
|
|
|
Всем хай! Без разминки переходим сразу к делу!
Есть следующие геом.фигуры: треугольник, ломаная, многоугольник, трапеция, точка, правильный многоугольник, замкнутая ломаная. Надо соорудить иерархию, которую образуют данные фигуры. Необязательно, чтобы все фигуры входили в иерархию. ------------------------------------------ Класс "Точка" характеризуются 2мя координатами (x; y} - тут вроде все однозначно. Затем, наверное, стоит взять класс "Ломаная". Отношение с "Точка" has-a, т е класс "Ломаная" будет иметь массив/набор объектов "Точка" (динамический массив какой-нить). В классе "Ломаная" реализовать метод ввода точек (ввод координат конкретной точки зашит внутри класса "Точка"). Я вот здесь не знаю, надо ли делать проверку, чтобы 3 точки не лежали на 1ой прямой. С одной стороны это не нарушает вид ломаной. Также нет гарантии, что последняя точка не будет иметь координаты 1ой, т е ломаная не станет замкнутой. Класс "Замкнутая ломаная" производный от "Ломаная"! Вызываем функцию ввода координат точек (из базового класса "Ломаная"), а затем отдельно проверяем, совпадает ли последняя точка с 1ой, если нет, то можно автоматом замкнуть, но лучше дать ввести координаты повторно и т.д. Кстати, замкнутая ломаная может быть простой или самопересекающейся, как понимаю это не важно в этом классе. Дальше, наверное, следует взять класс "Многоугольник". Вообще, грубо говоря, то замкнутая ломаная и многоугольник - синонимы. Как здесь поступить?. Многоугольники бывают выпуклые и самопересекающиеся (звезда). Хочется поставить ограничения только НА ВЫПУКЛЫЕ, т е если многоугольник самопересекающийся, то запрашивать повторно ввод координат вершин. Класс "Треугольник" производный от "Многоугольник"?! Кол-во точек известно и =3. После ввода координат надо убедиться, что треуг.существует (сумма 2ух любых сторон больше длины 3ей стороны). Вроде этого условия достаточно для существования треугольника. С др.стороны, если "Многоугольник" замкнутая ломаная, то треуг. по дефалту уже существует и проверка лишняя, хм... Класс "Трапеция" производный от "Многоугольника"?! Кол-во точек известно и =4. Необходимо, чтобы 2 стороны были параллельными (по опр. трапеции). Это реализовать перебором, сравнивая угловые коэффициенты. Класс "Правильный многоугольник" производный от "Многоугольник". Добавить проверку на равенство длин сторон и углов между ними (формулы для этого известны) -------------------------------------- И насчет полиморфизма. Имея указатель на базовый класс "Ломаная" можно добавлять "адреса" объектов разных классов (кроме "Точка") и выводить информацию о фигуре. Другого здесь не вижу, а вы?? Обязательно потребуется вспомогательная функция, вычисляющая расстояние между 2мя точками. В каком классе? Ни в каком - отдельная безклассовая функция, принимающая в качестве параметров 2 переменных типа "Точка". Наверное, так. Есть ли грубые ошибки в подобной иерархии?? Кстати, здесь возможны и др.иерархии. Готов посмотреть, если она не имеет проблем с моим вариантом. |
Сообщ.
#2
,
|
|
|
Замкнутая ломаная и многоугольник, наверное, не синонимы.
Пример: точки 0,0; 0,1; 1,0; 0,0; 5,5. Это замкнутая ломаная? Это многоугольник? Еще пример: 0,0, 0,1; 1,0. |
Сообщ.
#3
,
|
|
|
Цитата MIF @ Пример: точки 0,0; 0,1; 1,0; 0,0; 5,5. Это замкнутая ломаная? Это многоугольник? я не поленился и построил фигуру по этим точкам (визуально походит на трехмерную систему координат) ), но у тебя здесь нет замыкания в начало. Т е, если дописать в конце еще одну точку {0, 0}, то в этом случаем получаем вариант, когда "3" точки лежат на 1одной прямой для смежных сторон (кстати, я писал об этом в верхнем посте, т к не знаю, надо ли это отдельно проверять): 0,0; 5,5; 0,0 (несмотря на то, что (.)0,0 просто встречается дважды) на мой взгляд, да, это замкнутая ломаная или самопересекающийся многоугольник, хотя не уверен...А как ты считаешь? а этот вариант: Цитата MIF @ Еще пример: 0,0, 0,1; 1,0. это просто ломаная, т к нет замыкания (по сути катет и гипотенуза прям.тр-ка). Если что, подразумевается, что вершины соединяются в порядке ввода их координат |
Сообщ.
#4
,
|
|
|
Цель какая? Как/для чего будет использоваться.
1) Есть класс "Точка" 2) Есть базовый класс "ЧтоТо" (название придумаешь), в котором массив объектов "Точка". Все твои фигуры - это массив точек, которые можно по разному интерпретировать. 3) Куча классов: "Ломанная", "Квадрат" и т.д. от базового "ЧтоТо", где просто набор функций типа: "ЭтоЛоманная", "ЭтоКвадрат" и т.д. ЗЫ: 4) Для ломанной ничего не мешает иметь все точки на одной прямой. Все дело в том, какие действия планируются выполнять с объектами. Объект может, в процессе работы программы, трансформироваться, и у него могут перемещаться точки и в какой-то момент могут оказаться на одной прямой и потом продолжить дальнейшее движения. Вообщем, куда заведет фантазия... |
Сообщ.
#5
,
|
|
|
Black_Dragon, задача давно успешно решена, поэтому твои идеи, предложения и фантазии неактуальны + неинтересны!
зы: забыл поставить галочку, что "вопрос решен" |