Добавил:
I want to die Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем / 0207_Лиоско_ЛР6.2.pdf
Скачиваний:
17
Добавлен:
04.04.2022
Размер:
424.14 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра физической электроники и технологии

ОТЧЕТ по лабораторной работе №6

по дисциплине «Информационные технологии» Тема: Алгоритмы и программы решения задач комбинаторики

Студентка гр. 0207

 

Лиоско Е.П.

Преподаватель

 

 

Рябцев И.А.

Санкт-Петербург

2021

Алгоритм для построения выпуклой оболочки набора точек (Jarvis)

Цель работы.

Изучение и программирование алгоритма построения выпуклой оболочки набора точек.

Блок-схема программы для нахождения полярного угла вектора 1-2.

Текст программы 1.

clear;

clc;

sx=[1, -1, -1, 1, 1]; sy=[1, 1, -1, -1, 1]; for i=1:4

x1=sx(i); y1=sy (i); x2=sx(i+1); y2=sy(i+1);

p=anglePolar(x1,y1,x2,y2);

disp(p);

end

hp=compass(sx,sy); % построение векторов

2

function[polar]=angle(x1,y1,x2,y2) dx=x2-x1;

dy=y2-y1; r=sqrt(dx^2+dy^2); sns=dy/r; ang=asin(sns); polar=ang;

if dx<0 polar=pi()-ang;

else

if (dy<0) && (dx>0) polar=pi()-ang;

end

end end

Листинг 1

3.1416 -1.5708

0

1.5708

Блок-схема алгоритма построения выпуклой оболочки набора точек (Jarvis) и вывода результатов

3

Текст программы 2 (Алгоритм Джарвиса).

clc;

 

 

 

 

 

 

 

clear all;

 

 

 

 

 

n =

10;

 

 

 

 

 

 

l =

1;

 

 

 

 

 

 

l2 = 1;

 

 

 

 

 

 

s =

[2,

2; 5, 4; 8, 2;

 

7,

5;

9,

7;

6,

7;

 

 

5,

10;

4,

7;

1,

7;

3,

5];

sx = [2

5 8 7 9 6 5 4 1 3 0];

sy = [2

4 2 5 7 7 10 7 7 5 0];

for

i =

2:n

 

 

 

 

if

sy(i) <= sy(l)

 

 

l2

= i;

 

 

 

 

 

end

 

 

 

 

 

 

 

if

sx(l2) < sx(l)

 

 

l = l2; end

end

4

if l > 1

px = sx(1); py = sy(1);

sx(1) = sx(l); sy(1) = sy(l); sx(l) = px; sx(l) = py; end

sx(n+1) = sx(1); sy(n+1) = sy(1); bsangl = 0;

k = 2; m = 0;

dxy = 1;

while (k < (n+2) && dxy > 0) m = m+1;

polark = 100; for i = k:(n+1)

polar = anglePolar(sx(k-1), sy(k-1), sx(i), sy(i)); if polar < polark && polar >= bsangl

polark = polar; kplr = i;

end end

bsangl = polark; px = sx(k);

py = sy(k);

sx(k) = sx(kplr); sy(k) = sy(kplr); sx(kplr) = px; sy(kplr) = py;

dx = abs(sx(k)-sx(1)); dy = abs(sy(k)-sy(1)); dxy = dx+dy;

k = k + 1; end

plot(sx, sy, 'bo'); hold on;

plot(sx(1:m+1), sy(1:m+1), 'b-'); disp(m);

disp(sx);

disp(sy);

function polar = anglePolar(x1, y1, x2, y2) dx = x2-x1;

dy = y2-y1;

r = sqrt(dx.^2+dy.^2); sns = dy/r;

5

Соседние файлы в папке 2 сем