Рубрики

2D трансформация в компьютерной графике | Набор 1 (масштабирование объектов)

Преобразование масштабирования изменяет размер объекта. В процессе масштабирования мы либо сжимаем, либо расширяем размер объекта.
Операция масштабирования может быть достигнута путем умножения каждой координаты вершины (x, y) многоугольника на коэффициент масштабирования s x и s y, чтобы получить преобразованные координаты как (x ', y').
Итак, x '= x * s x и y' = y * s y .
Коэффициент масштабирования s x , s y масштабирует объект в направлении X и Y соответственно. Итак, вышеприведенное уравнение можно представить в виде матрицы:

Или P '= S. п
Процесс масштабирования:

Примечание. Если коэффициент масштабирования S меньше 1, мы уменьшаем размер объекта. Если коэффициент масштабирования S больше 1, мы увеличиваем размер объекта.

Алгоритм:

1. Make a 2x2 scaling matrix S as:
   Sx 0
   0  Sy
2. For each point of the polygon.
   (i) Make a 2x1 matrix P, where P[0][0] equals 
       to x coordinate of the point and P[1][0] 
       equals to y coordinate of the point.
   (ii) Multiply scaling matrix S with point 
        matrix P to get the new coordinate.
3. Draw the polygon using new coordinates.

Ниже приведена реализация C:

// C программа для демонстрации масштабирования объектов
#include<stdio.h>
#include<graphics.h>

  
// Матричное умножение для поиска новых координат.
// s [] [] - это масштабирующая матрица. р [] [] хранить
// точки, которые необходимо масштабировать.
// p [0] [0] - x координата точки.
// p [1] [0] - это координата y заданной точки.

void findNewCoordinate(int s[][2], int p[][1])

{

    int temp[2][1] = { 0 };

  

    for (int i = 0; i < 2; i++)

        for (int j = 0; j < 1; j++)

            for (int k = 0; k < 2; k++)

                temp[i][j] += (s[i][k] * p[k][j]);

  

    p[0][0] = temp[0][0];

    p[1][0] = temp[1][0];

}

  
// Масштабирование полигона

void scale(int x[], int y[], int sx, int sy)

{

    // Треугольник перед масштабированием

    line(x[0], y[0], x[1], y[1]);

    line(x[1], y[1], x[2], y[2]);

    line(x[2], y[2], x[0], y[0]);

  

    // Инициализация матрицы масштабирования.

    int s[2][2] = { sx, 0, 0, sy };

    int p[2][1];

  

    // Масштабирование треугольника

    for (int i = 0; i < 3; i++)

    {

        p[0][0] = x[i];

        p[1][0] = y[i];

  

        findNewCoordinate(s, p);

  

        x[i] = p[0][0];

        y[i] = p[1][0];

    }

  

    // Треугольник после масштабирования

    line(x[0], y[0], x[1], y[1]);

    line(x[1], y[1], x[2], y[2]);

    line(x[2], y[2], x[0], y[0]);

}

  
// Управляемая программа

int main()

{

    int x[] = { 100, 200, 300 };

    int y[] = { 200, 100, 200 };

    int sx = 2, sy = 2;

  

    int gd, gm;

    detectgraph(&gd, &gm);

    initgraph(&gd, &gm," ");

  

    scale(x, y, sx,sy);

    getch();

  

    return 0;

}

Выход:

Эта статья предоставлена Anuj Chauhan . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Рекомендуемые посты:

2D трансформация в компьютерной графике | Набор 1 (масштабирование объектов)

0.00 (0%) 0 votes