Примитивы, использующие сплайны — Spline
Подпакет Spline вместе с уже описанным подпакетом NumericalMath'SplineFit' (сплайновая регрессия) обеспечивает представление данных с помощью сплайна. В подпакете Spline определена единственная функция Spline [points, type], которая создает графический примитив, представляющий сплайн-кривую типа type (Cubic, Bezier или CompoziteBezier — см. описание подпакета NumericalMath'SplineFit').
Среди ее опций важно отметить следующие (как и ранее, приведены значения, используемые по умолчанию): SplineDots->None, SplinePoints->25, Max-Bend->10.0 и SplineDivision->20.0. Рисунок 14.85 показывает задание массива из пяти точек на плоскости и соединение их отрезками прямых и кубическими сплайн-функциями. Хорошо видна аналогия сплайна с гибкой линейкой. Сплайн-функции в данном случае применяются в порядке задания точек в списке pts. В этом случае возможно создание замкнутых линий (рис. 14.85 является наглядным примером этого). Следует отметить, что хотя сплайн-аппроксимация дает хорошие результаты при умеренном числе точек, при малом их числе и неудачном выборе типа сплайнов результат может оказаться неудовлетворительным. Рисунок 14.86 иллюстрирует такую ситуацию. Рисунок 14.87 показывает возможность построения сплайн-функции вместе с точками, через которые она проходит.
Рис. 14.85. Пример интерполяции пяти точек отрезками прямой и сплайнами
Рис. 14.86. Пример срыва сплайн-интерполяции точек
Рис. 14.87. Построение исходных точек и проходящей через них сплайн-функции
Создание поверхностей вращения — SurfaceOfRevolution
Одна из задач компьютерной графики — создание поверхностей вращения. Средства для этого дает подпакет SurfaceOfRevolution. Они представлены следующими функциями:- SurfaceOfRevolution [f, {x, xmin, xmax} ] — строит поверхность, образованную вращением кривой, описанной функцией f, при изменении х от xmin до xmax, в плоскости ху;
- SurfaceOfRevolution [{fx, f у}, {t, tmin, tmax} ] — строит поверхность, образованную вращением кривой, описываемой параметрически заданной на плоскости функцией {f x, f у}, в плоскости xz при изменении параметра t от tmin до tmax;
- SurfaceOfRevolution[{fx,fy,fz},{t,tmin,tmax}] — строит поверхность, образованную вращением кривой, описываемой параметрически заданной в пространстве функцией {fx, fy, fz}, в плоскости xz при изменении параметра t от tmin до tmax;
- SurfaceOfRevolution[f,{{x,xmin,xmax},{theta,thetamin,thetamax}}] — строит поверхность вращения кривой, описываемой функцией f, при угле theta, меняющимся от thetamin до thetamax.
Рис. 14.88. Фигура, образованная вращением линии cos(x)
Следующий пример показывает ту же фигуру (рис. 14.89) в другом положении. Это достигается сменой угла обзора с помощью опции viewVertical.
Рис. 14.89. Фигура рис. 14.88 в другом положении
Пример применения функции SurfaceOfRevolutibn [ {fx, fy}, {t, tmin, tmax) ] представлен на рис. 14.90. Формируется этакое декоративное яйцо на подставке. Заменив в определении функции Cos [u] на Sin [u], можно получить изображение рюмки.
Рис. 14.90. Построение декоративного яйца на подставке
Рисунок 14.91 демонстрирует возможность построения объемной фигуры с вырезами. Все, что для этого надо, — удачно выбрать диапазон изменения угла вращения. Если он будет от 0 до 2л, то фигура будет сплошной, не содержащей вырезов.
Рис. 14.91. Построение яйца с вырезом
Для управления положением оси вращения служат следующие опции:- RevolutionAxis->{x, z } — задает поворот вокруг оси, соединяющей начало координат с точкой {х, z} в плоскости xz\
- RevolutionAxis-> {х, у, z} — задает поворот вокруг оси, соединяющей начало координат с точкой {х, у, z}.
- ListSurfaceOfRevolution [ {point1,point2,...} ] — создает поверхность вращения, заданную массивом точек pointl, point2, ...;
- ListSurfaceOfRevolution[{point1,point2,...}, {theta,thetamin,thetamax}] — создает поверхность вращения, заданную массивом точек, при угле вращения theta от thetamin до thetamax.
Рис. 14.92. Управление положением оси вращения
Рис. 14.93. Пример построения фигуры вращения с образующей, заданной массивом точек
Что еще есть в пакете расширения Graphics
Помимо уже рассмотренных подпакетов пакет расширения Graphics содержит подпакеты ThreeScript и Common. Подпакет ThreeScript содержит функцию преобразования трехмерных графических объектов в программный код формата 3-Script, например:<<Graphics 'ThreeScript' obj = Graphics3D[Polygon[0,0,0, 0,1,0, 0,1,1]] • GraphicsSD • ThreeScript[ "object.ts", obj] object.ts !!object.ts % Graphics3D objects boundingbox 0 0 0 0 1 1 viewpoint 1.3 -2.399999999999999 2. ambientlight 000 lightsources 1. 0. 1. 1 0 0 1. 1. 1. 0 1 0 0. 1. 1. 0 0 1 polygon 0 0 0 0 1 0 0 1 1Подпакет Common содержит просто перечень системных символов (точнее, слов), которые приняты во всех подпакетах пакета Graphics. Вот этот список: Horizontal, MaxArrowLength, ScaleFactor, ScaleFunction и Vertical. В этом уроке мы научились:
- Выполнять анимацию графиков различного типа.
- Управлять цветами графиков.
- Строить стрелки на графиках.
- Строить графики комплекснозначных функций.
- Строить объемные контурные графики.
- Строить графики с окраской внутренних областей.
- Строить графики специальных типов.
- Строить графики неявных функций.
- Выводить обозначения кривых — легенды.
- Строить графики с множеством объектов.
- Строить параметрические трехмерные графики.
- Представлять поля на плоскости и в пространстве.
- Строить объемные многогранники — полиэдры.
- Создавать графические формы.
- Работать с примитивами, использующими сплайны.
- Создавать поверхности вращения.
Forekc.ru Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий |