Представление геометрических объектов
Трехмерный геометрический решатель GCM работает с определенным представлением данных геометрических объектов, проиллюстрированной в таблице 1. Все объекты выражены в координатах точек, векторов и чисел (скаляров), записанных в определенной для каждого типе форме.
Таблица 1 – Представление геометрических объектов
Записи всех перечисленных геометрических объектов можно унифицировать в виде кортежа значений: <\(O Z X Y R_A R_B\)>
где четверка значений O Z X Y – задает размещение объекта в пространстве, а именно его ЛСК, заданное точкой начала СК и тремя осям Z, X, Y, а два скалярных значения \(R_A\), \(R_B\) задают параметры радиусных объектов, таких как окружность, цилиндр, конус, тороид, сфера.
Считается, что геометрический объект любого типа имеет ассоциированную с ним локальную систему координат. Даже точка или сфера может избыточно представлена в виде ЛСК, для которых безразлично направление осей Z, X, Y, но имеют значение координаты точки начала O. Аналогично плоскость имеет свою ЛСК, начало которой задает положение плоскости, а ось Z задает нормаль плоскости. При этом значения осей X, Y для плоскости игнорируются.
В программном интерфейсе трехмерного решателя унифицированная форма записи в виде <\(O Z X Y R_A R_B\)> используется в структуре GCM_g_record, поля данных которой приведены в таблице 2:
Таблица 2 - Описание полей данных структуры GCM_g_record.
Тип данных |
Поле данных |
Интерпретация (геометрический смысл разъясняется в таблице 31.8.1.) |
|---|---|---|
GCM_g_type |
type |
дескриптор системы ограничений |
GCM_point |
origin |
Точка позиционирования геометрического объекта (начало ЛСК, центр окружности или сферы и т.д.) |
GCM_vec3d |
axisZ |
Ось «Z» локальной системы координат (например, в случае прямой ось axisZ – это её направляющий вектор). |
axisX |
Ось «X» локальной системы координат |
|
axisY |
Ось «Y» локальной системы координат |
|
double |
radiusA |
Задает радиус в случае окружности, сферы или цилиндра, для конуса задает радиус основания, для тора задает «Большой» радиус. |
radiusB |
Задает «Малый» радиус в случае тора или конуса |
GCM_g_record обобщает запись любой геометрии, поэтому в зависимости от типа геометрии некоторые поля данных GCM_g_record могут не использоваться. Например, поля axisX, axisY нужны только для случая type = GCM_LCS, а для таких объектов, как плоскость, цилиндр, тор не имеют значения. Поле axisZ не используется для точки, и сферы, однако в остальных случаях она задает ориентацию объекта в пространстве.
В API решателя GCM предусмотрены вспомогательные функции GCM_Point, GCM_Line, GCM_Plane, GCM_Cone, GCM_Cylinder, GCM_Circle, GCM_Torus, GCM_Sphere, GCM_SolidLCS, позволяющие правильно заполнить структуру GCM_g_record. Подробнее о данных функциях см. параграф Добавление и удаление геометрических объектов.