## Представление геометрических объектов Решатель геометрических ограничений работает с определенной формой представления геометрических объектов, проиллюстрированной на рис. 1. Все объекты выражаются через координаты точек, вектора и числа (скаляры). ```{figure} ../../pictures/S.1.7.1.png :width: 15cm :align: center Рис. 1 ``` Приложение может иметь свое представление геометрических объектов, отличное от решателя, однако передача данных о состоянии объектов в решатель и получение обратно результатов вычислений основываются на том, что каждый тип геометрии имеет свое представление: - **Точка** представлена парой декартовых координат \. - **Прямая** задается точкой позиции и вектором нормали. Предполагается, что у прямой есть направляющий вектор, который равен вектору нормали повернутому по часовой стрелке на 90 градусов. Другими словами, направляющему вектору с координатами \ будет соответствовать нормаль с координатами \. - **Окружность** задается точкой центра и радиусом. C3D Solver поддерживает окружности нулевого или положительного радиуса. Имеется возможность допустить или запретить нулевой радиус для окружности в индивидуальном порядке, для чего следует воспользоваться функцией обратного вызова **GCE_allow_zero_radius**, разрешающей нулевой радиус. **Замечание**: Необходимость опции нулевого радиуса возникает при решении следующих задач: - построение параметрического контура с исчезающими и вновь появляющимися дугами окружности; - построение параметрических 3D-моделей с переменной топологией на основе 2D-контуров; - построение поверхности по траектории переменного сечения. Одним из примеров применения опции нулевого радиуса является моделирование поверхности воздуховода переменного сечения, а именно прямоугольное сечение со скруглениями переходит в прямоугольник без скруглений. - **Эллипс** задается точкой центра, радиусами по «главной» (major) и по «минорной» (minor) полуосям и направляющим вектором главной полуоси. Также эллипс параметризуется величиной с периодом от ***0*** до ***2$\pi$***, пробегающей по эллипсу против часовой стрелки, начиная от точки на «главной» полуоси. - **Параметрическая кривая** передается в решатель в виде класса MbCurve. Такая кривая рассматривается как неподвижная, а вычисления связанные с этой кривой, строятся на виртуальных функциях: MbCurve::PointOn, MbCurve::FirstDer и MbCurve::SecondDer, выдающие соответственно точку на кривой по параметру, первую и вторую производную в этой точке. Подробнее о параметрических кривых см. параграф [Параметрические кривые общего вида](../../../TWO-DIMENSIONAL_SPLINES_AND_PARAMETRIC_CURVES/subsections/RU/General_Parametric_Curves.md) **Замечание**: Пока для создания параметрической кривой в системе ограничений потребуется создать экземпляр класса MbCurve, однако в будущем будет реализован альтернативный вариант, основанный на простых функциях, реализуемых самим пользователем. Также пользователь ядра C3D имеет возможность реализовать своего наследника для MbCurve. - **Сплайн** основан на NURBS-представлении, в основе которого лежит список контрольных точек. Более подробно работа со сплайном будет рассмотрена в главе [ДВУМЕРНЫЕ СПЛАЙНЫ И ПАРАМЕТРИЧЕСКИЕ КРИВЫЕ](../../../TWO-DIMENSIONAL_SPLINES_AND_PARAMETRIC_CURVES/Two-Dimensional_Splines_and_Parametric_Curves_ru.md) - **Ограниченная кривая** представляет собой участок кривой, ограниченный концевыми точками. Задается тройкой: базовая кривая, начальная точка участка, конечная точка участка. C3D Solver поддерживает опцию нулевой длины для ограниченной кривой и отрезка. Для того, чтобы допустить или запретить нулевую длину кривой в индивидуальном порядке необходимо воспользоваться функцией обратного вызова **GCE_allow_zero_length**. По умолчанию опция нулевой длины отключена.