# Работа с мышкой в MATLAB

## 11. Продолжение примера 6

Нарисуем график сплайна. Для этого зададим абсциссы узловых точек, случайным образом сгенерируем ординаты в диапазоне [0, 4] и зададим абсциссы точек для рисования сплайна с малым шагом 0.01, чтобы линия сплайна получилась гладкой. Команды для рисования сплайна выделим в отдельный файл PlotSpline.m. Нам придётся вызывать эту функцию многократно, при каждом изменении положения узловых точек, поэтому мы и записываем её в отдельный файл. Функции PlotSpline нужно передать в качестве параметров координаты узловых точек, абсциссы точек для рисования сплайна и дескриптор осей. Мы их опишем как глобальные переменные. Вот как теперь выглядит теперь наш основной файл DragSpline.m:

clear all % очистили рабочую область global x y xx hAxes; scrsz = get(0,'ScreenSize'); % размеры экрана монитора wscr = 640; % ширина окна hscr = 440; % высота окна waxe = wscr-40; % ширина осей haxe = hscr-40; % высота осей wgr = 6; % диапазон по x hgr = 4; % диапазон по y scw = waxe/wgr; % масштаб по x sch = haxe/hgr; % масштаб по y pl = (scrsz(3)-wscr)/2; % левый край фигуры pu = (scrsz(4)-hscr)/2; % верхний край фигуры hFig = figure('Position',[pl pu wscr hscr],... 'Resize','off','MenuBar','none',... 'NumberTitle','off',... 'Name','Spline Interpolation'); hAxes = axes('Units','pixels',... 'Position',[20 20 waxe haxe],... 'XLim',[0 wgr],'YLim',[0 hgr]); x = 0:wgr; % абсциссы узловых точек y = rand(1,wgr+1)*hgr; % ординаты узловых точек xx = 0:0.01:wgr; % абсциссы точек графика сплайна PlotSpline; % рисуем график сплайна

Файл PlotSpline.m имеет вид обычной функции MATLAB:

    function PlotSpline % рисует график сплайна
    global x y xx hAxes;
    yy = spline(x,y,xx); % ординаты графика сплайна
    axes(hAxes); % установили текущие оси
    cla % очистили оси
    hold on % включили задержку
    hPoint = line(x,y); % узловые точки
    hLine = line(xx,yy); % сплайн
    set(hPoint,'LineStyle','none',...
      'Marker','square','MarkerSize',7,...
      'MarkerEdgeColor',[0 0 1],'MarkerFaceColor',[0 0 1]);
    set(hLine,'Color',[0 0 0]);
    hold off % выключили задержку
    return % возврат в вызывающую программу

Его нужно поместить в какой-либо каталог, доступный системе MATLAB.