Другие языки программирования и технологии

Какой наиболее лаконичный способ реализовать Line::intersect(Line) в С++?

Есть класс Line, описывающий прямую на плоскости, заданную уравнением прямой. Как реализовать метод, который отдаёт либо точку пересечения, если она есть, либо каким-то образом даёт знать, что её нету?
Пока что придумал только два варианта: либо возвращать bool в зависимости от наличия пересечения и принимать в аргументах дополнительный указатель на Point, либо возвращать указатель на созданный в функции экземпляр Point или null, если пересечений нету.
Оба варианта мне не нравятся, поэтому прошу свежих идей.
Может, вообще исключения попробовать?
Идея возвращать указатель - правильная. Поскольку результат пересечения двух линий на плоскости одно из трех - точка, линия и ничего, то возвращать этот метод должен указатель на общего родителя линии и точки. То есть должен быть некий абстрактный класс - фигура. Будет несколько неудобно проверять, что получилось, но без этого получится уж очень непрозрачно.

Ещё чуток смущает то, что метод Intersect не статический. Более логично объявить его статическим методом некого отдельного класса, который получает в качестве аргументов 2 линии. Дело в том, что если вы объявите новый тип - окружность, то для пересечения окружности и линии в вашем потребуется по одному методу в классах линия и окружность, а в моём случае только один статический в служебном классе.

Кстати, при пересечении окружности и линии результат - ничего, точка или отдельный композитный объект, также наследуемый от фигуры и способный содержать вектор фигур, так как в этом случае точек будет 2 штуки.

Для обобщения на 3-мерный случай такая структура тоже работает. Пример - пересечение плоскости и окружности: окружность|пара_точек (композит) |точка|ничего.
ИК
Игорь Коротков
11 112
Лучший ответ
А если линии совпадают, что возвращать?
Jann Janim
Jann Janim
2 948
Александр Иевлев кстати, да
тогда переработать вариант с возвращаемым bool, чтобы возвращались коды ошибок типа GEOM_NO_SOLUTIONS, GEOM_INFINITY_SOLUTIONS
Можно передать по ссылке массив (вектор etc). Тогда и bool не надо возвращать. Сразу видно сколько пересечений найдено.

Если же нужен более глубокий анализ, то можно возращать некоторые коды, как уже написал Ponyfag1337. Для линии это могут быть например: Ок, Параллельны, Совпадают.

Для кадов возращать код ошибки содержащий некоторую информацию - норма.

А вот исключения... Они всё таки предназначены для исключительных ситуаций, а может так случиться, что их генерация у вас станет нормой. Тогда всё немножко подвиснет. Конкретно так.
Д!
Додар !
2 681

Похожие вопросы