2.7.13 Тело по траектории
Данный метод создает тело по траектории путём многократного копирования заданного контура вдоль заданной траектории в каждой её точке. Метод также поддерживает кручение и масштабирование контура.
Рис. 9. Тело по траектории
Синтаксис метода создания
sweep(ContourLine, PathLine, sweepAlignment=…, sweepTwist=…, sweepScaleMode=…, sweepScaleLaw=…, sweepScalePoint=…, mass=..., density=..., 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:/scalePosition:/scaleAll:/scaleNone:]
Тип масштабирования контура при перемещении вдоль траектории.
По умолчанию sweepAlignment = scaleNone:.
sweepAlignment = scaleNone:Не масштабировать.
sweepAlignment = scaleSize:Масштабировать только размер контура относительно точки – расстояние между точкой и траекторией не изменяется при копировании вдоль траектории. При выборе данного режима необходимо задать точку sweepScalePoint, относительно которой будет выполняться масштабирование.
sweepAlignment = scalePosition:Масштабировать только положение контура относительно точки – расстояние между точкой и траекторией изменяется в соответствии с законом масштабирования при копировании вдоль траектории. При выборе данного режима необходимо задать точку sweepScalePoint, относительно которой будет выполняться масштабирование.
sweepAlignment = scaleAll:Масштабировать и размер и положение контура. При выборе данного режиме точку sweepScalePoint задавать не нужно.
sweepScaleLaw = function [-]< [-]>Функция, задающая закон масштабирования контура вдоль траектории. Она описывает зависимость масштаба контура от нормализованной длины траектории, т.е. область определения функции ограничена интервалом [0;1]:
0 соответствует начальной точке траектории, 1 — конечной точке.
Значения функции масштабирования не могут быть отрицательны.
Например, функция
задает линейное увеличение масштаба контура от оригинального размера до удвоенного по мере движения вдоль траектории.
sweepScalePoint = pointТочка, относительно которой выполняется масштабирование контура, если установлены режимы масштабирования sweepScaleMode = [scaleSize:/scalePosition:].
Параметры являются общими для всех методов создания тел.
Параметры являются общими для всех методов создания геометрических объектов и описаны в пункте «Необязательные именованные параметры объектов» общей части главы «Геометрические и массово-инерционные объекты».
Описание
Метод работает следующим образом:
1. На вход принимаются образующий контур и траектория. Контур должен быть замкнут.
2. Если контур не плоский, выполняется поиск ближайшей к нему плоскости и затем контур проецируется на неё.
3. Устанавливаются законы кручения и масштабирования, а также тип ориентации контура если соответствующие ключевые параметры заданы пользователем.
4. Осуществляется многократное копирование контура (или его проекции если он не плоский) вдоль траектории с соблюдением всех заданных ключевых параметров.
5. Полученное тело проверяется на самопересечения.
Пример
В качестве примера рассмотрим сочетание простейших образующих – квадратный контур и дугообразную траекторию:
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);
//Тело по траектории:
solid sweep = sweep(contour, path);
Полученное тело показано на рис. 10, а – контур по умолчанию ориентируется перпендикулярно траектории. Альтернативная, параллельная ориентация контура представлена на рис. 10, б:
solid sweep_parallel = sweep(contour, path, sweepAlignment = alignParallel:);
![]() Рис. 10. Пример тела по траектории:
а – перпендикулярная ориентация контура;
б – параллельная ориентация контура
Перейдём к использованию законов кручения:
function scale_const(x[])= PI/2 * #x;
function twist_const(x[])= scale_const(#x) * 1[rad];
solid sweep_twisted = sweep(contour, path, sweepTwist = twist_const);
Поскольку область определения законов кручения и масштабирования ограничивается интервалом [0; 1], то для такой функции соответствующие граничные значения будут равны 0 и
![]() Рис. 11. Пример тела по траектории –
перпендикулярная ориентация контура вместе с кручением
Аналогичным образом применяются и законы масштабирования. В качестве примера – простая функция:
function scale_linear(x[])=#x+1;
solid sweep_scale_pos = sweep(contour, path, sweepScaleLaw = scale_linear, sweepScaleMode = scalePosition:, sweepScalePoint = cp3);
solid sweep_scale_size = sweep(contour, path, sweepScaleLaw = scale_linear, sweepScaleMode = scaleSize:, sweepScalePoint = cp3);
solid sweep_scale_all = sweep(contour, path, sweepScaleLaw = scale_linear, sweepScaleMode = scaleAll:);
Данная функция будет линейно масштабировать контур от исходного размера в самом начале траектории (при значении x = 0 функция принимает значение, равное 1 – исходный масштаб) до удвоенного (при x = 1 значение функции будет равно 2 – двойной масштаб) в самом конце траектории.
Полученные тела представлены на рис. 12:
![]() Рис. 12. Пример тела по траектории –
перпендикулярная ориентация контура вместе с масштабированием:
а – масштабирование размера контура относительно точки;
б – масштабирование положения контура относительно точки;
в – масштабирование и размера, и положения контура
|


