×
       

2.6.5 Поверхность по траектории

 
 Данный метод создает поверхность по траектории путём многократного копирования заданного контура вдоль заданной траектории в каждой её точке. Метод также поддерживает кручение и масштабирование контура.
 
Рис. 5. Поверхность по траектории
 
Синтаксис метода создания
sweep(ContourLine, PathLine, sweepAlignment=…, sweepTwist=…, sweepScaleMode=…, sweepScaleLaw=…, sweepScalePoint=…, color=..., visible=...)
 
Обязательные позиционные параметры метода
line ContourLine
Линия, по которой формируется образующий контур.
line PathLine
Линия, по которой формируется траектория, вдоль которой перемещается образующий контур.
 
Необязательные именованные параметры метода
sweepAlignment = [alignNormal:/alignParallel:]
Тип ориентации контура при перемещении вдоль траектории.
По умолчанию sweepAlignment = alignNormal:.
 sweepAlignment = alignNormal:
Ориентировать контур перпендикулярно направлению касательной к траектории.
 sweepAlignment = alignParallel:
Ориентировать контур параллельно самому себе вдоль всей траектории (параллельный перенос).
 sweepTwist = function [rad]< [-]>
Функция, задающая закон кручения контура вдоль траектории. Она описывает зависимость угла кручения контура в радианах от нормализованной длины траектории, т.е. область определения функции ограничена интервалом [0;1]:
0 соответствует начальной точке траектории, 1 — конечной точке.
Например, функция  задает линейное увеличение угла кручения от 0 до 0.5 радиан по мере движения вдоль траектории.
sweepScaleMode = [scaleSize:/scalePos:/scaleAll:/scaleNone:]
Тип масштабирования контура при перемещении вдоль траектории.
По умолчанию sweepAlignment = scaleNone:.
 sweepAlignment = scaleNone:
Не масштабировать.
 sweepAlignment = scaleSize:
Масштабировать только размер контура относительно точки. При выборе данного режима необходимо задать точку sweepScalePoint, относительно которой будет выполняться масштабирование.
 sweepAlignment = scalePos:
Масштабировать только положение контура относительно точки. При выборе данного режима необходимо задать точку sweepScalePoint, относительно которой будет выполняться масштабирование.
 sweepAlignment = scaleAll:
Масштабировать и размер и положение контура. При выборе данного режима точку sweepScalePoint задавать не нужно.
 sweepScaleLaw = function [-]< [-]>
Функция, задающая закон масштабирования контура вдоль траектории. Она описывает зависимость масштаба контура от нормализованной длины траектории, т.е. область определения функции ограничена интервалом [0;1]:
0 соответствует начальной точке траектории, 1 — конечной точке.
Значения функции масштабирования не могут быть отрицательны.
Например, функция  задает линейное увеличение масштаба контура от оригинального размера до удвоенного по мере движения вдоль траектории.
 sweepScalePoint = point
Точка, относительно которой выполняется масштабирование контура, если установлены режимы масштабирования sweepScaleMode = [scaleSize:/scalePos:].
 
color =..., visible =...
Параметры являются общими для всех методов создания геометрических объектов и описаны в пункте «Необязательные именованные параметры объектов» общей части главы «Геометрические и массово-инерционные объекты».
 
Описание
Метод работает следующим образом:
1.     На вход принимаются образующий контур и траектория.
2.     Устанавливаются законы кручения и масштабирования, а также тип ориентации контура если соответствующие ключевые параметры заданы пользователем.
3.     Осуществляется многократное копирование контура вдоль траектории с соблюдением всех заданных ключевых параметров.
4.     Полученная поверхность проверяется на самопересечения.
 
Пример
В качестве примера рассмотрим сочетание простейших образующих – квадратный контур и дугообразную траекторию:
 
point cp1 = point(-0.15[m], 0[m], -0.15[m]);
point cp2 = point(0.15[m], 0[m], -0.15[m]);
point cp3 = point(0.15[m], 0[m], 0.15[m]);
point cp4 = point(-0.15[m], 0[m], 0.15[m]);
line contour = polyLine(list(cp1, cp2, cp3, cp4, cp1, objType = point:));
point pp1 = point(0.1[m], 0.5[m], 0[m]);
point pp2 = point(0.5[m], 1[m], 0[m]);
line path = circlePPP(projectCS, pp2, pp1);
//Поверхность по траектории:
surface sweep = sweep(contour, path);
 
Полученная поверхность показана на рис. 6, а – контур по умолчанию ориентируется перпендикулярно траектории. Альтернативная, параллельная ориентация контура представлена на рис. 6, б:
 
surface sweep_parallel = sweep(contour, path, sweepAlignment = alignParallel:);
 
Рис. 6. Пример поверхности по траектории:
а – перпендикулярная ориентация контура; б – параллельная ориентация контура
 
Перейдём к использованию законов кручения, например:
 
function scale_const(x[])= PI/2 * #x;
function twist_const(x[])= scale_const(#x) * 1[rad];
surface sweep_twisted = sweep(contour, path, sweepTwist = twist_const);
 
Поскольку область определения законов кручения и масштабирования ограничивается интервалом [0; 1], то для такой функции соответствующие граничные значения будут равны 0 и , что означает плавное кручение контура от исходного положения в самом начале траектории до поворота на  в самом конце траектории. Полученная поверхность представлена на рис. 7:
 
Рис. 7. Пример поверхности по траектории –
перпендикулярная ориентация контура вместе с кручением
 
Аналогичным образом применяются и законы масштабирования. В качестве примера – простая функция:
 
function scale_linear(x[])=#x+1;
surface sweep_scale_pos = sweep(contour, path, sweepScaleLaw = scale_linear, sweepScaleMode = scalePosition:, sweepScalePoint = cp3);
surface sweep_scale_size = sweep(contour, path, sweepScaleLaw = scale_linear, sweepScaleMode = scaleSize:, sweepScalePoint = cp3);
surface sweep_scale_all = sweep(contour, path, sweepScaleLaw = scale_linear, sweepScaleMode = scaleAll:);
 
Данная функция будет линейно масштабировать контур от исходного размера в самом начале траектории (при значении x = 0 функция принимает значение, равное 1 – исходный масштаб) до удвоенного (при x = 1 значение функции будет равно 2 – двойной масштаб) в самом конце траектории.
Полученные поверхности представлены на рис. 8:
 
Рис. 8. Пример поверхности по траектории –
перпендикулярная ориентация контура вместе с масштабированием:
а – масштабирование размера контура относительно точки;
б – масштабирование положения контура относительно точки;
в – масштабирование и размера, и положения контура