68909

Преобразование на плоскости

Лекция

Информатика, кибернетика и программирование

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

Русский

2014-09-27

85 KB

1 чел.

ЛЕКЦИЯ 6

Преобразование на плоскости

Представление графических изображений осуществляется точками и линиями.

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

Аффинные преобразования на плоскости.

В компьютерной графике всё, что относится к двухмерному случаю, обозначается символом 2D (2–dimension).

Будем пользоваться декартовой системой координат – это удобный способ связывания геометрического объекта (т.М) – с числами X, Y – её координатами, которые позволяют количественно описывать геометрические фигуры.

y                                                           y             y*        x*

         M (x, y)         

                    M* (x*, y*)                                     M (x, y)

                         x                                                              x

                                                                                               

В декартовой системе координат преобразования можно рассматривать двояко:

         –изменяется положение точки, а система координат та же;

         –сохраняется точка, а изменяется координатная система.

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

 Преобразованные координаты описываются соотношениями:

          X* = ax + by + ;

          Y* = cx + dy + ;    общее аффинное преобразование,

      где a, b, c, d, , – произвольные числа.

Для перемещения точки на плоскости необходимо описать закон изменения её координат.

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

       –параллельный перенос;

       –вращение;

        –зеркальное отображение;

        –растяжение или сжатие.

Выбор этих случаев определяется двумя обстоятельствами:

  –каждое из приведенных преобразований имеет простой и наглядный геометрический смысл;

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

1). Параллельный перенос.

       Y                                                     y  

                                M*                                              M*

                                                                   M   

               

                      M                                                         O*  

                                   X                        O                            X

Переводит точку С с координатами X и Y в точку М* с координатами X* и Y*.

     X* = x + ;

     Y* = y + ;

Пример: перемещение прямой на плоскости

2). Зеркальное отражение.

     y                                                                 y

                    M                              M*               M

                          x                                                              x

                    M*

       x* = +x;                                               x* = –x;

       y = –y;                                                 y* = y;

  относительно оси абсцисс           относительно оси ординат

3).Растяжение (сжатие)

     y                                                        y                             

                    M                                                     M*              x* = a * x;

                                                                                                  y* = d * y;

             M*                                                  M

                                 x                                                        x

                                

Растяжение или сжатие зависит от значений a и d.

                M

                      M*

                                 x

      O

Если a>1 и d<1, то прямоугольник растягивается по Х и сжимается

  по Y.

Если a>1 и d>1 , то прямоугольник растягивается по X и Y.

Для эффективного использования этих известных формул в компьютерной графике  удобнее пользоваться матричной записью:

      –значения координат точки М можно рассматривать как                                                                               

элементы матрицы [x, y] – вектор-строка или  x   –вектор-столбец.

                                                                               y

      –так растяжение:

       a   0      x        x*                x* = a * x;

       0   d      y   =   y*                y* = d * y;

              отражение:

    x      1   0                               x* = x;

    y      0  -1     ось абсцисс      y* = –y;

    x      -1  0                               x* = –x;

    y       0  1      ось ординат     y* = y;

4). Вращение                                                         

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

 y

                                            0   0    – т. А

 D            C                       1    0    – т. В

                                            1   1    – т. С

                                            0   1    – т. D

 A            B             x

Применение общего матричного преобразования  

a   b     к единичному квадрату приводит к следующему

c  d

результату:

0  0                     0      0                A*

1  0    a  b           a       b                B*

1  1    c  d    =   a+c  b+d              C*

         0  1                     c       d                D*

Результаты:

–начало координат не подвергается преобразованию; A=A*=[0 0]

–координата В* определяется первой строкой общей матрицы преобразования;

–координата D* определяется второй строкой общей матрицей преобразования.

Таким образом, если координаты точка В* и точка D* известны, то общая матрица преобразования определена.

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

               y

                                                 BB* ;                 x* = 1 * cos

                    C*                                                      y* = 1 * sin

                                                   D – D* ;               x* = -1 * sin

D*                                     C                                    y* = 1 *  cos

                                   B*

                          

                          

               A  A*              B               x

Общую матрицу вращения можно записать:

              

   x  y     cos   sin                           x* = x * cos – y * sin;

             -sin  cos                            y* = x * sin + y * cos;

Таким образом, получили:

вращение(rotation)

        x         cos    -sin                          x* = x * cos – y * sin;                 

        y         sin       cos                        y* = x * sin + y * cos;

растяжение(dilatation)

          x      a  0                          x* =a*x; 

          y      0  d                          y*= d*y;

отражение(reflection)

          x      1   0                        x* =x;              по оси абсцисс

          y      0  -1                        y* = -y;

перенос(translation);            x* = x +  

                                               y* = y +

Каждое из приведенных преобразований координат можно так же описать формулами:

    x* = ax + by + ;

    y* = cx + dy + ;  – общие аффинные преобразования;

–при a=d=1 и b=c=0 – получаем перенос;

–при a=d=cos и –b=c=sin, ==0 – вращение;

–при a=1, d=–1, c=b== – отражение;

–при b=c== – растяжение (сжатие);

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

        x* = ax + by;

        y* = cx + dy; – отсутствуют.

и , а изменение координаты по X зависит от трёх параметров                      

a,b, и по Y зависит от трёх параметров c,d и .

Значит, чтобы охватить матричным подходом четыре простейших преобразования, необходимо перейти к описанию произвольной точки не парой чисел (x,y), а тройкой чисел [x,y,1] и [x*,y*,1]

Матрица преобразования после этого становится матрицей размера 2*3

a  b  

c  d    ,

где и вызывает смещение x* и y* относительно x и y.

Поскольку матрица 2*3 не является квадратной, то она не имеет обратной матрицы.

Поэтому её дополняют до квадратной, размера 3*3.

         a  b  

         c  d      – третья компонента векторов положения точек не                 

0  0  1               изменяет.

              

     Используя эту матрицу,

          x        a  b          x*

          y        c  d     =  y*

          1        0  0  1       1

получаем преобразованный вектор [x*, y*, 1].

В общем случае [X, Y, H].

Преобразование было выполнено так, что

           [X, Y, H] = [x*, y*, 1]

Преобразование, имеющее место в трехмерном пространстве, в нашем случае ограничено плоскостью H=1.

Прямая OM* пересекает плоскость H=1 в точке M*(x*,y*,1), которая однозначно определяет точку M(x, y) координатной плоскости XY.

Представление двухмерного вектора трёхмерным или в общем случае n–мерного вектора (n+1)–мерным называют однородным координатным воспроизведением.

В однородных координатах запись будет в виде:

                                 a  c  0

[x, y, H]=[x, y, 1] *   b  d  0

                                               1   ,

 где x = x*, y = y*, H = 1.

В общем случае H не равняется 1 и преобразованные обычные координаты получаются за счет нормализации однородных координат, т.е.

                 X* = x/H;  Y* = y/H.

Основная матрица преобразования размера для однородных двухмерных координат имеет вид:

a  b  

c  d  

m  n  s

И может быть разделена на четыре части

a, b, c, d – осуществляет изменение масштаба, сдвиг и вращение;

и – выполняет смещение;

m и n – получение проекции;

s – производит полное изменение масштаба.

Так как при H, которое не равняется, мы получаем изображение в трёхмерном пространстве, то для простоты вычислений в 2D используем H=1 и матрицу обобщенную на четыре преобразования:

x*      x        a  b                   x* = ax + by + ;

y*  =  y   *    c  d                  y* = cx + dy + ;

1        1        0  0  1                         1 = 1.

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

вращения (rotation):

       cos  -sin  0                               cos   sin    0

       sin   cos  0        обратная        -sin  cos   0

        0        0      1                                   0       0       1

растяжение(dilatation):

    a  0  0                                 1/a  0    0                x* = ax;

    0  d  0           обратная        0  1/d  0                y* = dy;

    0  0  1                                   0   0   1

 

–отражение(reflection):

     1  0  0                         1   0  0                           x* = x;

     0 –1 0      обратная    0 –1  0                          y* = -y;

     0  0  1                          0  0  1

–переноса(translation):

     1  0                           1  0  -                          x* = x + ;

     0  1       обратная     0  1 -                          y* = y + .

     0  0  1                          0  0  1

 

Двухмерное вращение вокруг произвольной точки.

Выше было рассмотрено вращение изображения около начало координат.

Однородные координаты обеспечивают поворот изображения вокруг точек, отличных от начала координат.

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

     –перенос центра вращения в начало координат;

     –поворот относительно начала координат;

     –перенос точки вращения в исходное положение.

Пример: построить матрицу преобразования при повороте на угол   вокруг точки M(m,n) , не совпадающей с началом координат.

           Y

                        

                       M

                                         x

1). Перенесем плоскость на вектор M(-m, -n) для совмещения точки поворота с началом координат:

                   1  0  -m

         T_=    0  1  -n

                   0  0   1

2). Поворот на угол :

            cos  -sin  0

     R=  sin   cos  0

              0        0      1

3).Перенесем плоскость на вектор M(m, n) для вращения точки поворота в начало координат:

             1  0  m

      T=   0  1  n

             0  0  1

Результирующая матрица:

                            1  0  m         cos  -sin  0

M=T * R * T_=    0  1  n     *   sin    cos 0    =  

                            0  0  1            0         0     1

         

      cos  -sin  m         1  0  -m         cos  -sin   -mcos + nsin + m

 =   sin    cos  n     *    0  1  -n   =    sin    cos  -msin – ncos + n    

        0         0      1          0  0   1            0         0                    1                    

    x*       x

    y*   =  y   *  M

    1         1        

                   T * R –T_

 X* = xcos – ysin – mcos + nsin + m;

 Y* = xsin + ycos – msin – ncos + n;

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

                     1  0  -m

 1).    T_ =    0  1  -n    

                     0  0  1       

 

                     a  0  0

 2).    D =      0  d  0

                     0  0  1      

                   1  0  m

 3).    T =    0  1  n

                   0  0  1        

                1  0  m         -a  0  0          1  0  -m

      M=     0  1  n    *     0  d  0     *    0  1  -n    ;

                0  0  1           0  0  1          0  0  1          

                   a   0   -am + m

          M=   0   d   -dn + n

                   0   0         1


 

А также другие работы, которые могут Вас заинтересовать

62639. Урок физической культуры – урок здоровья 23.68 KB
  По данным социологических исследований отмечается что у активно занимающихся физической культурой и спортом в значительно меньшей степени более чем на 20 проявляется психологическое и особенно общее утомление...
62640. Совершенствование техники передачи, ловли и ведения баскетбольного мяча 83 KB
  Ходьба: обычная по залу; на носках руки вверх; на пятках руки за голову в сторону; ходьба на внешней стороне стопы; ходьба на внутренней стороне стопы. Передвижения приставными шагами правым левым боком с имитацией передач бросков от груди...
62641. Прохождение полосы препятствий. Совершенствование баскетбольной техники 55.13 KB
  Цель: обучить навыкам игры в баскетбол Задачи: Образовательные: совершенствовать технику ведения мяча правой и левой рукой в движении. Оздоровительные: развивать быстроту реакции Воспитательные: содействовать развитию внимания и воспитанию чувства коллективизма...
62642. Совершенствование навыка ходьбе на лыжах. Продвижение скользящим шагом до 1000 метров 16.61 KB
  Продвижение скользящим шагом до 1000 метров Задачи урока: образовательные: Совершенствование умения передвижения скользящим шагом до 1000 метров воспитательные: воспитывать трудолюбие настойчивость в достижении цели.
62643. Техника передачи мяча двумя руками от груди после ведения на месте, в шаге 110.84 KB
  Стоя ноги вместе руки на поясе стоя ноги на ширине плеч руки согнуты в локтях перед грудью стоя ноги на ширине плеч руки в стороны кисти сжаты в кулак стоя ноги на ширине плеч руки на поясе.