Назад к материалам

Рисуем геометрические объекты в Scilab

строим на плоскости фигуры и ломаные

Примеры того, как нарисовать сложные фигуры в Scilab

Рассмотрим, как в Scilab строить эллипсы, прямоугольники и произвольные геометрические фигуры.

Прямая линия

Начнём с простого примера построения линии.

Прежде всего, сделаем заготовку графической области, на которой будем рисовать

clc; clf();

plot2d(0,0,-1,"031"," ",[-2,-2,2,2]);
axes = gca();
axes.grid = [2,2];

Неизменная часть для всех рисуночков

Квадратная область с сеткой в Scilab
Квадратная область с сеткой в Scilab

Квадратная область с сеткой в Scilab

Для того, чтобы нарисовать прямую нам понадобятся две точки и функция .
Итак, для линии, идущей из точки (-1.5, 0) в (1, 1.5) зададим два массива хов и уков соответственно:

xpts = [-1.5 1];
ypts = [0 1.5];

Задание вектор-строк координат хов и уков

А далее просто построим наш график по заданным точкам (которых всего две):

plot(xpts, ypts);  

Построение прямой по 2м точкам

line = axes.children.children(1);
//изменим толщину линий на графике  
line.thickness = 2;
  
//изменим цвет линии на графике    
line.foreground = 3;

Немного подправим цвет и жирность прямой

line.mark_mode = 'on';
line.mark_size = 6;

Добавим соединительные пипульки и увеличим их размер

В итоге получим зелёную полужирную прямую с кругляшами на концах:

Прямая линия в Scilab
Прямая линия в Scilab

Прямая линия в Scilab

Ломаная линия

Эту линию, конечно, можно продолжить, просто добавив новые элементы в массивы , :

xpts = [-1.5 1 1.5 .5 -1];
ypts = [0 1.5 1 -1.5 -1];

Рисуем произвольную ломаную в Scilab

Ломаная линия в Scilab
Ломаная линия в Scilab

Ломаная линия в Scilab

Произвольный многоугольник

Из линии можно сделать многоуголиник, если в массивы координат последними элементами добавить их начальные значения:

xpts = [-1.5 1 1.5 .5 -1 -1.5];
ypts = [0 1.5 1 -1.5 -1 0];

Фигура по точкам в Scilab

Неправильный многоугольник в Scilab
Неправильный многоугольник в Scilab

Неправильный многоугольник в Scilab

Этот многоугольник можно закрасить, используя способ 1 polyline_style:

line.polyline_style = 5;

Закрашиваем многоугольник в Scilab

Закрашенный многоугольник в Scilab
Закрашенный многоугольник в Scilab

Закрашенный многоугольник в Scilab

Если же требуется более тонкая настрока цветов, то нуно прибегнуть к способу 2 и вместо polyline_style испольщовать fill_mode и closed. При этом, замыкать ломаную вручную необязательно:

xpts = [-1.5 1 1.5 .5 -1];
ypts = [0 1.5 1 -1.5 -1];
  
line.fill_mode = "on";
line.closed = "on";

//изменим цвет заливки фона  
line.background = 6;  

Закрашиваем и замыкаем многоугольник в Scilab

Закрашенный многоугольник в Scilab
Закрашенный многоугольник в Scilab

Закрашенный многоугольник в Scilab

Правильный n-угольник

Теперь, когда мы натренеровались строить и настравивать отображение фигур в Scilab, построим правильный многоугольник, вписанный в единичную окружность.

xpts = [];
ypts = [];

Зададим массивы для ординат и абсцисс

angles = 5;
degreeStep = 2*%pi/angles;

Зададим количество углов и сразу посчитаем градус одного угла

Осталось в цикле вычислисть все хы и уки.
Для этого, мы будем -раз крутить вектор, который прикреплён в начале координат, каждый раз увеличивая угол поворота на .

Следовательно, интересующие нас координаты - это и текущего угла.
А чтобы начинать движение из точки (0, 1), нужно прибавить к текущему углу:

for j = 1:angles
    xpts(j) =  cos(%pi/2 + degreeStep * j);
    ypts(j) =  sin(%pi/2 + degreeStep * j);
end

Цикл для вычисления координат вершин правильного многоугольника

Нарисуем правильный пятиугольник в Scilab, замкнув ломаную и изменим толщину линий и их цвет на графике

plot(xpts, ypts);
line = axes.children.children(1);
line.thickness = 3;
line.foreground = 4;
line.closed = "on";
Правильный многоугольник в Scilab
Правильный многоугольник в Scilab

Правильный многоугольник в Scilab

Эту задачу можно решить и другим способом - с помощью

angles = 8;
degreeStep = 2*%pi/angles;

xpts = sin(degreeStep*(0:angles-1));
ypts= cos(degreeStep*(0:angles-1));

xpoly(xpts,ypts); 
line = gce();
line.thickness = 4;
line.foreground = 6;
line.closed = "on";

Рисуем правильный многоугольник в Scilab

Правильный многоугольник с помощью xpoly
Правильный многоугольник с помощью xpoly

Правильный многоугольник с помощью xpoly()

Для того, чтобы нарисовать закрашенный многоугольник, нужно использовать функцию

angles = 10;
degreeStep = 2*%pi/angles;

xpts = sin(degreeStep*(0:angles-1));
ypts= cos(degreeStep*(0:angles-1));

xfpoly(xpts,ypts); 
line = gce();
line.thickness = 4;
line.foreground = 6;
line.background = 3;
line.closed = "on";

Рисуем правильный многоугольник в Scilab

Правильный многоугольник с помощью xfpoly
Правильный многоугольник с помощью xfpoly

Правильный многоугольник с помощью xfpoly()

Эллипс

Для построения эллипса нужно задать 6 значений:

Значения матрицы эллипса
Значения матрицы эллипса

Значения матрицы эллипса

Координаты (xLeftTop, yLeftTop) верхнего левого угла прямоугольника, в который будет вписан эллипс;

Ширину elWidth и Высоту elWidth прямоугольника, в который будет вписан эллипс;

Угол angleStart, откуда будет стартовать дуга эллипса и Угол angleEnd, где дуга остановится.

Для того, чтобы построить изображённый выше эллипс, зададим следующие значения:

xLeftTop = -1;
yLeftTop = 1;

elWidth = 2.5;
elHeight = 1.5;

angleStart = 0;
angleEnd = 360*64;
  
arcs = [xLeftTop; yLeftTop; elWidth; elHeight; angleStart; angleEnd]; 

Задаём параметры эллипса

Сам эллипс по заданным параметрам строится с помощью функции :

xarcs(arcs)
  
  
ellips = gce().children;
  
//изменим цвет линии   
ellips.foreground = 6;
//и сделаем её пожирнее    
ellips.thickness = 3;

Задаём параметры эллипса

Сектор

Из эллипса можно строить произвольные сектора, располагая их в желаемом месте на координатной сетке.

Произвольные сектора
Произвольные сектора

Произвольные сектора

Построим два сектора на основе эллипса с заданными параметрами:

//циановый сектор
xLeftTop = -1.5;
yLeftTop = 1.5;

elWidth = 1;
elHeight = 3;

angleStart = 0;
angleEnd = 90*64;

arcs = [xLeftTop; yLeftTop; elWidth; elHeight; angleStart; angleEnd]; 

xarcs(arcs)
ellips = gce().children;
ellips.fill_mode = "on"
ellips.foreground = 4;
ellips.background = 4;

//маджентовый сектор
xLeftTop = 0;
yLeftTop = 0;

elWidth = 2;
elHeight = 1;

angleStart = 30*64;
angleEnd = 210*64;

arcs = [xLeftTop; yLeftTop; elWidth; elHeight; angleStart; angleEnd]; 

xarcs(arcs)
ellips = gce().children;
ellips.fill_mode = "on"
ellips.foreground = 6;
ellips.background = 6;

Рисуем сектора в Scilab с помощью функции xarcs()

Звезда Сименса

В заключении построим Звезду Сименса изображение, применяемое для проверки остроты зрения (wiki).

Звезда Сименса с 50 лучами
Звезда Сименса с 50 лучами

Звезда Сименса с 50 лучами

//число секторов  
n = 50;
  
for j = 1:n
   xfarc(-1.5,1.5,3,3,2*j*(180/n)*64,64*(180/n));
end

Рисуем закрашенные сектора в цикле в Scilab