На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Иерархия геом.фигур
    Всем хай! Без разминки переходим сразу к делу!

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

    ------------------------------------------
    Класс "Точка" характеризуются 2мя координатами (x; y} - тут вроде все однозначно.

    Затем, наверное, стоит взять класс "Ломаная". Отношение с "Точка" has-a, т е класс "Ломаная" будет иметь массив/набор объектов "Точка" (динамический массив какой-нить). В классе "Ломаная" реализовать метод ввода точек (ввод координат конкретной точки зашит внутри класса "Точка"). Я вот здесь не знаю, надо ли делать проверку, чтобы 3 точки не лежали на 1ой прямой. С одной стороны это не нарушает вид ломаной. Также нет гарантии, что последняя точка не будет иметь координаты 1ой, т е ломаная не станет замкнутой.

    Класс "Замкнутая ломаная" производный от "Ломаная"! Вызываем функцию ввода координат точек (из базового класса "Ломаная"), а затем отдельно проверяем, совпадает ли последняя точка с 1ой, если нет, то можно автоматом замкнуть, но лучше дать ввести координаты повторно и т.д. Кстати, замкнутая ломаная может быть простой или самопересекающейся, как понимаю это не важно в этом классе.

    Дальше, наверное, следует взять класс "Многоугольник". Вообще, грубо говоря, то замкнутая ломаная и многоугольник - синонимы. Как здесь поступить?. Многоугольники бывают выпуклые и самопересекающиеся (звезда). Хочется поставить ограничения только НА ВЫПУКЛЫЕ, т е если многоугольник самопересекающийся, то запрашивать повторно ввод координат вершин.

    Класс "Треугольник" производный от "Многоугольник"?! Кол-во точек известно и =3. После ввода координат надо убедиться, что треуг.существует (сумма 2ух любых сторон больше длины 3ей стороны). Вроде этого условия достаточно для существования треугольника. С др.стороны, если "Многоугольник" замкнутая ломаная, то треуг. по дефалту уже существует и проверка лишняя, хм...

    Класс "Трапеция" производный от "Многоугольника"?! Кол-во точек известно и =4. Необходимо, чтобы 2 стороны были параллельными (по опр. трапеции). Это реализовать перебором, сравнивая угловые коэффициенты.

    Класс "Правильный многоугольник" производный от "Многоугольник". Добавить проверку на равенство длин сторон и углов между ними (формулы для этого известны)
    --------------------------------------
    И насчет полиморфизма. Имея указатель на базовый класс "Ломаная" можно добавлять "адреса" объектов разных классов (кроме "Точка") и выводить информацию о фигуре. Другого здесь не вижу, а вы??

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

    Есть ли грубые ошибки в подобной иерархии??
    Кстати, здесь возможны и др.иерархии. Готов посмотреть, если она не имеет проблем с моим вариантом.
    Сообщение отредактировано: FasterHarder -
      Замкнутая ломаная и многоугольник, наверное, не синонимы.

      Пример: точки 0,0; 0,1; 1,0; 0,0; 5,5.
      Это замкнутая ломаная? Это многоугольник?

      Еще пример: 0,0, 0,1; 1,0.
        Цитата 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.

        это просто ломаная, т к нет замыкания (по сути катет и гипотенуза прям.тр-ка).

        Если что, подразумевается, что вершины соединяются в порядке ввода их координат
          Цель какая? Как/для чего будет использоваться.

          1) Есть класс "Точка"
          2) Есть базовый класс "ЧтоТо" (название придумаешь), в котором массив объектов "Точка". Все твои фигуры - это массив точек, которые можно по разному интерпретировать.
          3) Куча классов: "Ломанная", "Квадрат" и т.д. от базового "ЧтоТо", где просто набор функций типа: "ЭтоЛоманная", "ЭтоКвадрат" и т.д.

          ЗЫ:
          4) Для ломанной ничего не мешает иметь все точки на одной прямой. Все дело в том, какие действия планируются выполнять с объектами. Объект может, в процессе работы программы, трансформироваться, и у него могут перемещаться точки и в какой-то момент могут оказаться на одной прямой и потом продолжить дальнейшее движения.

          Вообщем, куда заведет фантазия...
            Black_Dragon, задача давно успешно решена, поэтому твои идеи, предложения и фантазии неактуальны + неинтересны!

            зы: забыл поставить галочку, что "вопрос решен"
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0220 ]   [ 16 queries used ]   [ Generated: 29.03.24, 08:08 GMT ]