Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Задача 4.3
- % Написать пользовательскую функцию, которая отрисовывает
- % в графическом окне плоскую спираль с заданными параметрами.
- % Входными аргументами функции должны быть: радиус и начальный
- % угол стартовой точки (r0, phi0), шаг витков спирали (d),
- % направление (ds) - раскручивающаяся либо закручивающаяся
- % спираль (1 либо -1), количество витков, которые необходимо
- % отобразить (N). Направление спирали - против часовой стрелки,
- % на один полный оборот отображать не менее 100 точек.
- clear all
- close all
- clc
- r0=10 % нач радиус
- phi0 = 90 % нач угол градусы
- ds = -1 % направл 1 или -1 наружу или внутрь
- N = 1 % витки 0 - незаданно
- d = 1 % шаг 0 - не заданно
- spiral(r0, phi0, ds, N, d)
- function[val] = spiral(r0, phi0, ds, N, d)
- phi0 = phi0 / 180 * pi
- points = 100;
- k=1;
- if( ~((ds==-1)||(ds==1)) )
- disp('неверно заданно направление спирали')
- val = 0;
- return
- end
- if( ds == -1 )
- N2 = r0/d;
- if (N2<N)
- disp(['Внутри спирали радиусом ',num2str(r0),' неукладывается ',num2str(N), ' витков с шагом ',num2str(d)])
- val = 0;
- return
- end
- end
- if (ds == -1)
- k=-1;
- N2= r0/d;
- if (N2<=N)
- disp('Витки до центра дошли')
- N=N2;
- r0=0.00001;
- ds=1;
- end
- if (N2>N)
- disp('Витков до центра нехватило')
- r0 =r0 - N*d;
- ds=1;
- end
- end
- Lpi = N*points; % минимум точек
- turns = 2*N*pi;
- t = linspace(phi0*k,turns+phi0*k,Lpi);
- % t = linspace(phi0*(1+k)/2,turns-phi0*(1-k)/2,Lpi);
- x = cos(t).*(turns+t/r0*d*N)./turns*r0;
- y = sin(t).*(turns+t/r0*d*N)./turns*r0*k;
- figure(2)
- hold('on');
- grid on;
- plot(x,y)
- val = 1;
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement