Пересечение прямых

Опубликовано Sep 30, 2011 в Математика и логика | 8 коммент.

, , ,

Напишите класс Line, реализующий прямую линию в декартовом пространстве.
Напишите для этого класса метод, который бы проверял, пересекаются ли две линии.

class Line
{
   // ваш код
 public: bool line_intersection(const Line line) const
  {
    bool result;
    // ваш код
    return result;
  }
};
1 Цель задания проверка базовых знаний элементарной математики вместе с простейшими приемами ООД
2 Время выполнения от 10 минут для двумерного случая до 30 мин для многомерного
3 Формат выполнения код пишется на листике, без доступа к документации

Критерии оценки FulcrumWeb:

Кандидат должен первым делом понять, что в условии не указана размерность пространства и обязательно задать вопрос об этом, иначе вообще не ясно какие поля создавать.

Ожидаемые вопросы:

  1. Можно ли считать пространство двумерным, трехмерным или оно имеет произвольную размерность?
  2. Какая требуется точность при решении задачи?
  3. Есть ли четкое требование по поводу того, каким уравнением описывать прямую, если пространство имеет размерность 2?
  4. Если решение будет реализовано для n-мерного случая, то можно ли считать, что уже имеется реализация вспомогательного класса ВЕКТОР, который управляет своим распределением памяти с готовыми методами для математических операций скалярного и векторного произведения?
  5. Если решение будет реализовано для n-мерного случая, то можно ли использовать подходящие контейнеры из STL при отсутствии класса из предыдущего пункта ?
  6. Как трактовать случай, когда прямая пересекается сама с собой?

Оценка результатов:

Вопрос о размерности пространства должен быть задан обязательно. Если на него дан однозначный ответ, что n = 2 или 3, то эту информацию стоит использовать и не вводить динамических структур данных.
Вопрос о точности вычислений также должен быть поднят, так как задача подразумевает сравнение вещественных чисел.

Для юниора приемлемым является решение, при котором он сам без вопросов додумал, что n = 2. Если при этом он видит, что и где нужно изменить, если размерность возрастет – это совсем хорошо. Но мы надеемся не увидеть применения оператора == к операндам типа double, а также, что не будет упущена ситуация, связанная с последним вопросом.

От программистов с опытом работы мы ожидаем услышать вопросы из приведенного выше перечня, причем задаваемые с учетом ответов на предыдущие вопросы. То есть оценивается умение работать с требованиями и их уточнять. Достоинства решения самого общего вида совсем без вопросов кажутся нам спорными, так как, возможно, что создается система обучения школьников планиметрии.