Здравствуйте, anonymous, Вы писали:
FM>>Таким образом отказываемся от ООП.
A>да, выходит так... либо придется писать в аннотации что-то вроде:
A>A>template < class T >
A>bool is_intersect_lines2( T l0, T l1 );
A>
A>Класс прямой T толжен иметь атрибуты с названиями p0x, p0y, p1x, p1y, в которых хранятся координаты точек, через которые проходит данная прямая.
Верно, получаем вариант, который развивается
здесьАвтор: Зверёк Харьковский
Дата: 29.09.05
FM>>Компактно-крохотных сниппетов может оказаться совсем немного.
A>в этом я не уверен, все же алгоритмов существует достаточно много, плюс различные реализации этих алгоритмов...
Да, действительно, только получается вот какая ситуация: у нас будут реализованы алгоритмы — пересечение линий, совпадение отрезков, отсечение треугольника, попадание точки внутрь многоугольника, проверка многоугольника на самопересечения и выпуклость и т.д. — будет много действий, но не будет понятий, над которыми эти действия производятся. Странно
FM>>Конечно, эту проблему можно переложить на пользователя, потребовать обязательно проверять передаваемые параметры, но тогда код становится более опасным (для меня это было бы уже достаточной причиной отказаться от использования такого сниппета)
A>согласен... хотя переложить эту проблему на пользователя не такая уж и плохая идея, просто нужно честно предупредить его в аннотации о всех ограничениях...
A>к примеру, хочет пользователь метод CLine.IsIntersectWith(CLine&), берёт он функцию is_intersect_lines2() и вставляет её вызов в тело метода... проверка подобная указанной уже не нужна, поскольку реализована в конструкторе CLine...
Да, можно, но перед тем, как использовать такой код, я трижды подумаю
A>есть ещё идея автоматически генерировать такие методы, по некоему описанию класса, заданному пользователем, на основе вот таких сниппетов функций... но как, пока не ясно...
Интересная идея. Надо осмыслить.
FM>>p00x == p01x Эту операцию должен предоставлять пользователь — получаем еще один параметр у is_intersect_lines2, указатель на функцию сравнения.
A>при использовании классов будет то же самое...
Да, при любом подходе будем иметь
зависимость от этой операции.
A>кроме того, поскольку ООП не будет, то будут использоваться только базовые типы, а для них эта операция определена...
Не так, как нужно — нам придется расширять ее, чтобы учитывалась погрешность (один из возможных вариантов).
FM>>2. Немножно субъективизма.
FM>>Посмотрим на другую ф-ю — определение точки пересечения прямых в 3d. Просто прикинем ее сигнатуру.
FM>>...
FM>>К чему это говорю — такую страшилку использовать в своем проекте захочется только от большоой тоски, чесслово
A>честно говоря, не вижу смысла в такой функции, её можно разделить на три вызова intersect_lines2()...
Может не совсем точно выразился — ф-я должна найти точку пересечение двух прямых в трехмерном пространстве.