Advertisement
Savelyev_Vyacheslav

task_4_3

Nov 17th, 2021 (edited)
1,121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.25 KB | None | 0 0
  1. % Задача 4.3
  2. % Написать пользовательскую функцию, которая отрисовывает
  3. % в графическом окне плоскую спираль с заданными параметрами.
  4. % Входными аргументами функции должны быть: радиус и начальный
  5. % угол стартовой точки (r0, phi0), шаг витков спирали (d),
  6. % направление (ds) - раскручивающаяся либо закручивающаяся
  7. % спираль (1 либо -1), количество витков, которые необходимо
  8. % отобразить (N).  Направление спирали - против часовой стрелки,
  9. % на один полный оборот отображать не менее 100 точек.
  10.  
  11.  
  12. clear all
  13. close all
  14. clc
  15. r0=10 % нач радиус
  16. phi0 = 90 % нач угол градусы
  17. ds = -1 % направл 1 или -1  наружу или внутрь
  18. N = 1 % витки 0 - незаданно
  19. d = 1 % шаг 0 - не заданно
  20.  
  21.  
  22.  
  23.  
  24. spiral(r0, phi0, ds, N, d)
  25.  
  26.  
  27.  
  28. function[val] = spiral(r0, phi0, ds, N, d)
  29. phi0 = phi0 / 180 * pi
  30. points = 100;
  31. k=1;
  32. if( ~((ds==-1)||(ds==1)) )
  33.     disp('неверно заданно направление спирали')
  34.     val = 0;
  35.     return
  36. end
  37. if( ds == -1 )
  38.     N2 = r0/d;
  39.     if (N2<N)
  40.         disp(['Внутри спирали радиусом ',num2str(r0),' неукладывается ',num2str(N), ' витков с шагом ',num2str(d)])
  41.         val = 0;
  42.         return
  43.     end
  44.    
  45. end
  46.  
  47. if (ds == -1)
  48.     k=-1;
  49.     N2= r0/d;
  50.     if (N2<=N)
  51.         disp('Витки до центра дошли')
  52.         N=N2;
  53.         r0=0.00001;
  54.         ds=1;
  55.     end
  56.     if (N2>N)
  57.         disp('Витков до центра нехватило')
  58.         r0 =r0 - N*d;
  59.         ds=1;
  60.     end
  61. end
  62.  
  63. Lpi = N*points; % минимум точек
  64. turns = 2*N*pi;
  65. t = linspace(phi0*k,turns+phi0*k,Lpi);
  66. % t = linspace(phi0*(1+k)/2,turns-phi0*(1-k)/2,Lpi);
  67. x = cos(t).*(turns+t/r0*d*N)./turns*r0;
  68. y = sin(t).*(turns+t/r0*d*N)./turns*r0*k;
  69. figure(2)
  70. hold('on');
  71. grid on;
  72. plot(x,y)
  73. val = 1;
  74. end
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement