Популярные услуги

Все письменные КМ под ключ за 3 суток! (КМ-6 + КМ-7 + КМ-8 + КМ-9 + КМ-10)
КМ-6. Динамические массивы. Семинар - выполню любой вариант!
КМ-2. Разработка простейших консольных программ с использованием ООП + КМ-4. Более сложные элементы ООП - под ключ!
Любая задача на C/C++
Одно любое задание в mYsql
Сделаю ваше задание: Лабораторная работа на Pascal / Lazarus
Любой тест по базам данных максимально быстро на хорошую оценку - или верну деньги!
Любой реферат по объектно-ориентированному программированию (ООП)
Повышение уникальности твоей работе
Оба семинара по программированию под ключ! КМ-2. Разработка циклических алгоритмов + КМ-3. Функции и многофайловые программы в Си
Главная » Лекции » Информатика и программирование » Язык Borland Pascal 7.0 » ЛР10 - Масштабирование, поворот, управление объектами

ЛР10 - Масштабирование, поворот, управление объектами

2021-03-09СтудИзба

Лабораторная работа №10

Масштабирование, поворот, управление объектами

Цель работы – овладение практическими приемами разработки программ, приобрести навыки в управлении режимами отображения объектов в графическом режиме.

1. Теоретическая  часть

1.1. Преобразование изображений: перенос,

масштабирование, поворот, комбинированные преобразования

Рекомендуемые материалы

При построении изображений часто приходится иметь дело  с ситуациями, когда  общее изображение (рисунок) включает в себя целый ряд компонент (подрисунков),  отличающихся друг от друга только местоположением, ориентацией, масштабом, т.е. отдельные подрисунки обладают значительным геометрическим сходством.

В этом случае целесообразно описать один подрисунок в качестве базового,  а затем получать остальные требуемые  подрисунки путем использования операций преобразования.

С помощью операций преобразования можно выполнять следующие действия:

1)  перемещать рисунки из одного места экрана в другое;

2) создавать рисунок из более мелких элементов  (составных частей);

3) добавлять к существующему рисунку новые элементы;

4) увеличивать размер рисунка для улучшения его наглядности или   отображения более мелких деталей;

5) уменьшать размер рисунка для внесения, например, поясняющих надписей или отображения на экране новых рисунков;

6) создавать движущиеся изображения.

Все изменения рисунков можно выполнить с помощью трех базовых операций:

1) переноса (перемещения) изображения;

2) масштабирования (увеличения или уменьшения размеров) изображения;

3) поворота изображения (употребляют также термины вращение, изменение ориентации).

Для реализации перечисленных операций используется  аппарат линейных преобразований.

Линейное преобразование на плоскости - это такое  отображение плоскости в себя, при котором прямая переходит в прямую. Произвольная точка с координатами (X,Y) переходит в результате линейного преобразования в точку с координатами (X1,Y1)  в соответствии с выражениями:

X1 = A*X + B*Y + C

Y1 = D*X + E*Y + F,                          (1)

где A,B,C,D,E,F - коэффициенты данного преобразования, однозначно его определяющие.

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

Формулы линейного преобразования (1) можно записать в матричной форме:

 ¦ A D 0¦

(X1,Y1,1) = (X,Y,1) * ¦B E 0 ¦ = (X,Y,1) * M,     (2)

 ¦ C F 1 ¦

где M матрица преобразования.

Здесь используются однородные координаты, которые были введены в геометрии и ныне широко используются в машинной графике. В однородных координатах точка P(X,Y) записывается в виде P(W*X,W*Y,W) для любого масштабного множителя W<>0. При этом, если для точки задано ее представление в однородных координатах P(X,Y,W), то можно найти ее двумерные декартовы координаты как x=X/W, y=Y/W. Для двумерного пространства W=1, поэтому операция деления не требуется. Однородные координаты можно представить как вложение промасштабированное с коэффициентом W двумерной плоскости в плоскость z=W (здесь z=1) в трехмерном пространстве.

Следует добавить, что с помощью матрицы преобразования

                                ¦ A B ¦

     (X1,Y1)=(X,Y)*¦ C D ¦ , - нельзя описать операцию переноса.

Для двух  последовательно выполняемых линейных преобразований можно записать следующее выражение:

(X2,Y2,1) = (X1,Y1,1)*M2 = (X,Y,1)*M1*M2 = (X,Y,1)*M                 (3)

где X,Y - координаты исходной точки;

X1,Y1 - координаты точки после первого преобразования;

X2,Y2 - координаты точки после второго преобразования;

M1,M2,M - матрицы соответственно первого,  второго и  результирующего преобразований.

Поскольку в общем случае операция умножения матриц не является коммутативной, то в общем случае и два последовательных линейных преобразования некоммутативные.

Если определитель матрицы преобразования отличен от нуля, то такое преобразование будет являться аффинным.  При аффинном преобразовании плоскость не может вырождаться в линию или точку, параллельные прямые переводятся в параллельные  и  всегда имеется обратное   преобразование.

Аффинное преобразование может быть представлено суперпозицией трех преобразований: переноса, масштабирования, поворота.

1.2. Перенос изображения

Перенос изображения заключается в перемещении  отображенного объекта   из одного места экрана в другое место.  Перенос изображения позволяет построить рисунок в произвольном  месте экрана и затем перенести его в другую,  требуемую, часть экрана. При  этом можно изменить компоновку  рисунка  или  создать единый рисунок из набора готовых элементов.

Для переноса точки из позиции с координатами (X,Y)  в позицию с координатами (X1,Y1)  надо к координате X добавить DX, а к координате Y - DY единиц, причем DX = X1 - X,  DY = Y1 - Y.

Матрица преобразования M для операции переноса имеет следующий вид:

¦ 1      0      0 ¦

  M =   ¦ 0      1      0 ¦                             (4)

¦ DX   DY  1 ¦

При подстановке ее в выражение (2), получим

¦  1    0     0 ¦

         (X1,Y1,1) = (X,Y,1)  *  ¦  0    1     0 ¦   или

¦ DX DY  1 ¦

X1 = X+DX, Y1 = Y+DY.

Положительное значение   DX  означает  перемещение  точки вправо по горизонтали,  отрицательное -  влево;  положительное значение DY  - перемещение вниз по вертикали,  отрицательное - вверх.

Необходимо задавать  такие значения DX,  DY,  чтобы после преобразования точка оставалась в пределах экрана,  иначе  она высвечиваться не будет. Не следует задавать слишком малые значения DX, DY (DX < 0,5, DY < 0,5), так как в этом случае точка повторно высвечивается на старом месте.

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

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

Например, для переноса окружности достаточно перенести ее центр и вычертить ее, зная радиус. Таким же образом осуществляется перенос эллипса.

1.3. Масштабирование изображения

При создании  изображения на экране дисплея может возникнуть необходимость изменения его размеров  с  целью  повышения его наглядности, для вставки созданного изображения в уже имеющийся рисунок.  Размер рисунка можно изменить,  если умножить все расстояния   между точками на некоторую постоянную величину (коэффициент масштабирования).  Если коэффициент масштабирования больше единицы, то рисунок увеличивается, если меньше единицы - уменьшается.

Наряду с  коэффициентом  масштабирования  для  выполнения масштабирования надо указать новое  положение  рисунка  (после выполнения масштабирования). Новое положение рисунка определяется центром масштабирования - некоторой  центральной  точкой, относительно которой выполняется масштабирование.

В качестве такой точки  может  быть  выбрана  центральная точка рисунка, точка, лежащая на границе рисунка, точка, лежащая вне рисунка и даже вне экрана.

Масштабирование может быть однородным (коэффициенты масштабирования вдоль осей абсцисс и ординат одинаковы),   в  этом случае пропорции  рисунка сохраняются.

Масштабирование может быть и неоднородным (коэффициенты вдоль осей абсцисс и ординат различны), в этом случае пропорции рисунка изменяются.

Неоднородное масштабирование может применяться при подборе пропорций рисунка,  в процессе конструирования и проектирования при подборе размеров объекта.

Матрица преобразования при масштабировании имеет вид

         ¦ KX  0  0 ¦

 M = ¦  0 KY  0 ¦                                             (5)

         ¦  0  0     1 ¦

При подстановке ее в выражение (2) получим:

                                   ¦ KX  0  0 ¦

(X1,Y1,1) = (X,Y,1)*¦  0 KY  0 ¦               или

                                   ¦  0    0   1 ¦

     X1 = X*KX, Y1 = Y*KY,

где         KX - коэффициент масштабирования по оси абсцисс;

KY - коэффициент масштабирования по оси ординат.

Применяя преобразование (5)  ко всем точкам  рисунка, получим рисунок  промасштабированный относительно начала координат. При этом если KX > 1 и KY > 1, то рисунок увеличивается в размере и удаляется от начала координат; если KX < 1 и KY< 1, то рисунок уменьшается в размерах и приближается к началу координат.

Координаты промасштабированной точки определяются из следующих выражений:

X1=X*KX+(1-KX)*XM

Y1=Y*KY+(1-KY)*YM                         (6)

где         X,Y - координаты исходной точки;

X1,Y1 - координаты промасштабированной точки;

XM,YM - координаты центра масштабирования;

KX,KY - коэффициенты масштабирования.

1.4. Масштабирование рисунка

Для масштабирования рисунка необходимо в  соответствии  с (6) вычислить новые координаты всех точек нового изображения, а затем полученные точки соединить линиями. При этом размеры рисунка равномерно увеличиваются или уменьшаются, если KX=KY.

Однако не всегда надо вычислять координаты всех точек нового рисунка. Например, при масштабировании окружности, достаточно вычислить новые координаты ее центра, а в качестве радиуса взять величину k*R (k - коэффициент масштабирования,  R  - радиус исходной окружности).  Таким же образом можно поступить при масштабировании эллипсов, прямоугольников.

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

С помощью масштабирования можно растянуть или сжать изображение вдоль одной координатной оси,  оставив его без изменения вдоль другой оси.  Например, масштабируя квадрат с коэффициентами масштабирования KX = 1, KY =2, получим прямоугольник, у которого большая сторона имеет вертикальное расположение.

Неравномерное масштабирование окружности приводит к тому, что будет изображен эллипс. Но в этом случае программист должен воспользоваться процедурой рисования эллипса, а не окружности. В  такой ситуации в целях общности целесообразно  далее  окружности вычерчивать   процедурой рисования эллипса (задавая равные значения полуосей).

1.5. Поворот изображения

Наиболее часто поворот изображения используется при  создании движущихся изображений в моделирующих,  игровых программах. Однако иногда бывает удобно повернуть на  90о график, гистограмму. В  процессе проектирования также необходимо поворачивать изображение создаваемого объекта,  чтобы  рассмотреть его с разных сторон и избежать возможных ошибок.

1.5.1.Поворот точки

Для выполнения  поворота  надо указать величину угла,  на который необходимо осуществить поворот,  и  координаты  точки, которая берется за центр вращения. Если исходную точку A с координатами (X,Y)  по дуге окружности с центром в точке C с координатами (Xс,Yс) поворачивают на угол t, то  координаты (X1,Y1) повернутой точки могут быть записаны в следующем виде:

X1 = Xс + (X-Xс) * cost + (Y-Yс) * sint * rx/ry

Y1 = Yс + (Y-Yс)*cost - (X-Xс) * sint * ry/rx,                            (7)

где rx, ry - разрешающие способности вдоль оси X и Y соответственно.

Значения rx/ry (ry/rx) могут быть получены в Турбо-Паскале с помощью процедуры GetAspectRatio, они являются обратными величинами по отношению к коэффициентам, выдаваемым процедурой:

 rx/ry = ya/xa, ry/rx=xa/ya

Если центр вращения совпадает с началом координат (Xc=0, Yс=0), то матрица преобразования имеет вид:

¦ cost  -sint  0 ¦

    M =    ¦ sint   cost  0 ¦                                                         (8)

¦  0         0    1 ¦

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

Центр поворота может быть расположен в любом месте  экрана, а также за пределами его границ.

Угол поворота лежит обычно в пределах от 0  до 360 , другие углы поворота также допустимы, однако поворот при этих углах эквивалентен повороту при углах из указанного диапазона.

1.5.2. Поворот рисунка

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

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

При вычислении  координат  следует иметь в виду,  что для хранения новых координат точек нельзя использовать ту  же  область памяти, где хранятся исходные координаты. Это объясняется тем,  что при вычислении координаты Y1 в выражении  (7) используется значение   исходной координаты X.  Таким образом, используя одну область памяти, мы будем затирать  нужную  нам старую координату X и неправильно вычислять новое значение координаты Y1.

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

Преобразованное изображение (повернутое,   промасштабированное или перенесенное) может высвечиваться вместе с исходным. Если же это нежелательно, то перед рисованием нового изображения необходимо произвести очистку экрана.

При выполнении преобразований желательно заранее  предвидеть расположение рисунка,  т.к.  точки,  выходящие за границы экрана, не  высвечиваются.  Если в программе  введен  контроль значений координат точек, то он только может обеспечить поиск ошибки, но  программу в этом случае все равно придется корректировать.

Программа lab_31 строит исходную астроиду с осями, параллельными координатным осям, а затем может построить ее промасштабированное, перенесенное или повернутое на некоторый угол изображение. Поскольку заранее не известно количество точек, аппроксимирующих кривую, то для хранения координат точек исходной астроиды используется динамический список.

1.6. Композиция преобразований

Композиция преобразований представляет собой совокупность последовательного выполнения базовых преобразований: переноса, масштабирования, поворота.  Зная матрицы преобразований, можно заранее вычислить результирующую  матрицу  преобразований  как произведение отдельных  матриц  и использовать уже полученную матрицу для определения итоговых координат точек рисунка, не вычисляя промежуточных координат.

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

Полезно знать, что перенос и поворот являются аддитивными операциями, а масштабирование - мультипликативной операцией, то есть для нахождения результирующего преобразования в первом случае надо суммировать значения отдельных переносов (в случае поворота итоговый угол равен сумме отдельных углов поворота), во втором случае коэффициенты масштабирования следует перемножить для нахождения результирующего коэффициента масштабирования.

В ряде частных случаев наблюдается коммутативность операций преобразования. В таблице приведены варианты таких преобразований:

М1

М2

Перенос

Перенос

Масштабирование

Масштабирование

Поворот

Поворот

Масштабирование

(однородное)

Поворот

2. Демонстрационные примеры

Пример 10.1.

  program lab_31;                            {Выполнение преобразований на плоскости на примере плоской кривой - астроиды}

  uses Graph,Crt;

  label 1;

  const b=120;                     {параметр астроиды}

        fon=7;                                          {цвет фона}

        col=12;                                         {цвет рисования}

  type  spis=^p;

        p=record

         x,y:integer;

         praw:spis;                   {метод проверка}

        end;

  var i,                                                   {параметр цикла}

      gd,gm,                                            {тип и режим работы адаптера}

      xn,yn,                                             {координаты центра астроиды}

      x,y,                                  {координаты текущей точки исходной астроиды}

      x1,y1,                                             {координаты текущей точки преобразованной астроиды}

      xnc,ync,                                         {координаты начальной точки астроиды}

       n,                                                    {количество точек, аппроксимирующих астроиду}

      xc,yc,                                              {координаты центра поворота}

      xm,ym,                                           {координаты центра масштабирования}

      dx,dy:  integer;                            {величины смещений}

       a,c,d,f,                                           {рабочие переменные}

      dt,                                                    {шаг изменения аргумента при аппроксимации}

      t,                                                      {текущее значение аргумента}

      kx,ky,                                             {коэффициенты масштабирования}

      kx1,ky1,                                         {единица минус коэффициент масштабирования}

      ug,                                                   {угол поворота в градусах}

      ur,                                                   {угол поворота в радианах}

      rx,ry,                              {отношения коэффициентов, учитывающих разрешающие cпособности}

      sur,cur: real;                {значение синуса и косинуса угла поворота}

      xa,ya:word;                  {коэффициенты учета разрешающих способностей}

      nach,                                               {указатель на начало списка}

      kon,                                 {указатель на конец списка}

      rab:  spis;                                      {текущий указатель}

      pr:    char;                     {признак выбираемой функции}

  begin

        nach:=nil;                    {указатель на начало списка}

        kon:=nil;                      {указатель на конец списка}

        rab:=nil;                                      {текущий указатель}

        gd:=detect;  

        InitGraph(gd,gm,'d:turbo');

        GetASpectRatio(xa,ya);

xn :=GetMaxX div 2;{координаты центра}

                yn:=GetMaxY div 2;         {кривой}

        dt:=2.0/3.0/b;                              {шаг изменения аргумента}

        n:=round(2*pi/dt);

{вычисление координат точек исходной астроиды}

{и формирование списка, хранящего координаты}

        for i:=1 to n do

        begin

              t:=(i-1)*dt;

              a:=cos(t);

              c:=a*a*a;

              x:=xn+round(b*c);

              f:=sin(t);

              d:=f*f*f;

              y:=yn-round(b*d*xa/ya);

              new(rab);                               {создает новую динамическую  переменную типа rab}

              rab^.x:=x;

              rab^.y:=y;

              if t=0 then nach:=rab

                     else kon^.praw:=rab;

              kon:=rab;

        end;

        repeat

              RestoreCrtMode;                {восстанавливает текстовый режим экрана}

              writeln('Выберите нужную функцию');

              writeln('Исходное изображение - i(I)');

              writeln('Перенесенное изображение - p(P)');

              writeln('Промасштабированное изображение - m(M)');

              writeln('Повернутое изображение - w(W)');

              writeln('Конец работы - e(E)');

              pr:=UpCase(ReadKey);

              case pr of

         'P': begin

                   writeln('Введите величины смещений (dx,dy)');

                   readln(dx,dy);

              end;

         'M': begin

                   writeln('Введите координаты центра масштабирования');

                   writeln('(координаты центра астроиды',xn:5,yn:5,')');

                   readln(xm,ym);

                   writeln('Введите коэффициенты масштабирования');

                   readln(kx,ky);

              end;

         'W': begin

                   writeln('Введите координаты центра поворота');

                   writeln('(координаты центра астроиды',xn:5,yn:5,')');

                   readln(xc,yc);

                   writeln('Введите угол поворота');

                   readln(ug);

              end;

         'E':  goto 1;

              else;

            end;

              SetGraphMode(GetGraphMode);  {установить графический режим}

              SetBkColor(fon);

              SetColor(col);

              rab:=nach;

              kx1:=1-kx;

              ky1:=1-ky;

              ur:=ug*pi/180;

              sur:=sin(ur);

              cur:=cos(ur);

              rx:=xa/ya;

              ry:=ya/xa;

              while rab<>nil do

              begin

                   x:=rab^.x;

                   y:=rab^.y;

                   case pr of

          'I':   begin

                       x1:=x;

                       y1:=y;

                 end;

          'P':   begin

                       x1:=x+dx;

                       y1:=y+dy;

                 end;

          'M':   begin

                      x1:=round(x*kx+xm*kx1);

                      y1:=round(y*ky+ym*ky1);

                 end;

          'W':   begin

                      x1:=round(xc+(x-xc)*cur+(y-yc)*sur*ry);

                      y1:=round(yc+(y-yc)*cur-(x-xc)*sur*rx);

                 end;

                 else ;

                  end;

                 if nach=rab then

                 begin

                      xnc:=x1;

                      ync:=y1;

                      MoveTo(xnc,ync);      {смещает текущий указатель к точке}

                 end

                 else LineTo(x1,y1);         {рисует линию от текущего указателя до точки}

                 rab:=rab^.praw;

              end;

              LineTo(xnc,ync);

              readln;

        until (pr='E');

1:     CloseGraph;

   end.

3.Задачи, для самостоятельного решения

Задача 1.

1. Изобразить квадрат со стороной а, перемещающийся по горизонтали на расстоянии 100 точек от начала координат.

2. Изобразить удаляющийся квадрат, определенных размеров, размещенный в центре экрана.

Задача 2.

1. Изобразить прямоугольник с основанием L и высотой H, перемещающийся по диагонали экрана.

2. Изобразить удаляющийся прямоугольник, определенных размеров, первоначально размещенный в центре экрана.

Задача 3.

1. Изобразить окружность радиуса r, перемещающуюся по синусоиде с амплитудой не более 100.

2. Разработать программу построения круговой диаграммы по заданным значениям не более 12, которые должны выводиться рядом с соответствующим сектором диаграммы.

Задача 4.

1. Изобразить на экране гармонические колебания шара, подвешенного на нити, т.е. по полуокружности радиуса R.

2. Разработать программу, которая демонстрирует на экране движение прямоугольника: прямоугольник улетает от нас к некоторой точке горизонта, одновременно вращаясь вокруг своей оси.

Задача 5.

1. Построить правильный пятиугольник, вписанный в окружность с координатами центра x0,y0 и радиусом r. Через 10 секунд повернуть его на: p / 4.

2. Разработать программу, которая демонстрирует на экране движение шара: шар улетает от нас из центра экрана к некоторой точке горизонта.

Задача 6.

1. Окружность радиуса r перемещается на экране справа налево, по достижении ею середины экрана слева направо начинает перемещаться по синусоиде.

2. Разработать программу, которая демонстрирует на экране движение треугольника: треугольник улетает от нас к некоторой точке горизонта, одновременно вращаясь вокруг своей оси.

Задача 7.

1. Изобразить перемещение окружности по спирали из центра экрана по n виткам и внешнему радиусу R. Начальное направление спирали образует с осью OХ угол:

x=R / cos t

y=R / sin t,  шаг 2p.

2. Разработать программу, которая демонстрирует на экране движение квадрата: квадрат приближается к нам из некоторой точке горизонта, одновременно вращаясь вокруг оси приближения.

Задача 8.

1. Изобразить на экране часы с часовой и минутной стрелками, вращающимися в одном направлении.

2. Разработать программу, которая демонстрирует на экране движение квадрата по строфоиде, затирая за собой кривую. Квадрат при этом вращается по часовой стрелке.

Задача 9.

1. Проиллюстрировать законы Кеплера, согласно которым планеты движутся по эллипсам, в одном из фокусов которых находится солнце. Параметрические уравнения для траектории движения по эллипсу

x=R1 / coos t

y=R2 / sin t, в интервале [0, 2p].

2. Разработать программу, которая демонстрирует на экране движение квадрата по функции f(x) = sin (2x / (x+2)), затирая за собой кривую. Квадрат при этом вращается по часовой стрелке.

Задача 10.

1. Начертить узор, образованный двадцатью вложенными квадратами. Стороны первого параллельны осям координат и равны 60. Вершины каждого последующего квадрата - это точки на сторонах предыдущего, делящие эти стороны в отношении А=0,08.

2. Разработать программу, которая демонстрирует на экране движение шара по функции f(x) = cos (2x^2 / (x+2)), затирая за собой кривую.

Задача 11.

1. Изобразить треугольник, вращающийся вокруг точки пересечения его высот.

2.Разработать программу, которая демонстрирует на экране движение квадрата: квадрат удаляется из некоторой точки к горизонту, одновременно вращаясь вокруг оси удаления.

Задача 12.

1. Изобразить на экране движение бильярдного шара без луз.

2. Изобразить на экране масштабирование квадрата с интервалом 2 в диапазоне от 10 до 30

Рекомендуем посмотреть лекцию "Содержание".

Задача 13.

1.Построить модель атомного ядра, бомбардируемого a-частицами. В центре экрана - ядро с вращающимся вокруг него тремя электронами. Параметрические уравнения для одного электрона таковы:

X = r / coos t

У = r / sin t,  t принадлежит  [0, 2p].

Из одного из углов экрана появляется: a-частица в направлении ядра, для которой координата по оси Y моделируется датчиком случайных чисел. В случае столкновения с ядром или с одним из электронов происходит взрыв.

2.Разработать программу, которая демонстрирует на экране движение квадрата: квадрат удаляется из некоторой точки к горизонту, одновременно вращаясь вокруг оси удаления.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее