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

 

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Волгоградский государственный технический университет

Кафедра ЭВМ и систем










Семестровая работа

по курсу «Компьютерная графика»




Выполнила: студентка группы

ВЗК-382с Кравцова В.В.








Волгоград - 2014

1. Задание


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

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

вращения;

перенос;

отражение;

масштабирование.

Фигура - 2.

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

Скриншот работы программы.

При запуске и нажатии кнопки «Начало», видим фигуру «2» недалеко от начала координат.


Рисунок 1


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

геометрический вращение масштабирование программа


Рисунок 2


На данном изображении показан перенос из начального положения на -100 пкс по оси OX и на -150 пкс по оси OY.

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


Рисунок 3


На данном изображении показано вращение из начального положения на 152 гр.

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


Рисунок 4


На данном изображении показано удлинение в 2,5 раза по оси OX и в 0,8 раза по оси OY.

Для выполнения операции отражения, необходимо нажать одноименную кнопку.


Рисунок 5


На данном изображении показано отражение из начального положения относительно оси OX.

2. Текст программы

System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;KG

{partial class Form1 : Form

{x_mid, y_mid;double[][] XY;num_xy = 10;[] vect;[][] matr;Form1()

{();();

}void button1_Click(object sender, EventArgs e)

{();

}void GraphBegin()

{g = pictureBox1.CreateGraphics();();(g);

}void InitBukva()

{= new double[num_xy][];(int i = 0; i < num_xy; i++)[i] = new double[2];[0][0] = 70; XY[0][1] = 20;[1][0] = 20; XY[1][1] = 20;[2][0] = 80; XY[2][1] = 100;[3][0] = 70; XY[3][1] = 110;[4][0] = 40; XY[4][1] = 110;[5][0] = 30; XY[5][1] = 100;= new double[3];= new double[3][];(int i = 0; i < 3; i++)[i] = new double[3];

}void DrawOXY(Graphics g, int x, int y)

{

g.Clear(Color.White);

x_mid = Convert.ToInt32(x / 2);

y_mid = Convert.ToInt32(y / 2);

_DrawOXY(g, x, y);

}void _DrawOXY(Graphics g, int x, int y)

{

g.DrawLine(Pens.Black, 0, y_mid, x, y_mid);

g.DrawLine(Pens.Black, x_mid, 0, x_mid, y);

}void UpdateContext(Graphics g)

{

DrawOXY(g, pictureBox1.Width, pictureBox1.Height);

DrawBukva(g, XY);

}void DrawBukva(Graphics a, double[][] _XY)

{

for (int i = 0; i < (num_xy - 1); i++)

_DrawLine(a, _XY[i][0], _XY[i][1], _XY[i + 1][0], _XY[i + 1][1]);

}void _DrawLine(Graphics g, double x1, double y1, double x2, double y2)

{

g.DrawLine(Pens.Black, ConvertX(x1), ConvertY(y1), ConvertX(x2), ConvertY(y2));

}int ConvertX(double x)

{

return Convert.ToInt32(x) + x_mid;

}int ConvertY(double y)

{

return y_mid - Convert.ToInt32(y);

}void pictureBox1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

UpdateContext(g);

}void button2_Click(object sender, EventArgs e)

{

_Perenos(Convert.ToDouble(tbPerenosX.Text), Convert.ToDouble(tbPerenosY.Text));

Graphics g = pictureBox1.CreateGraphics();

UpdateContext(g);

}void _Perenos(double X, double Y)

{

int mas = 3;

double[] v = new double[3];

v[0] = X;

v[1] = Y;

v[2] = 1;

for (int i = 0; i < (mas - 1); i++)

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

if (i == j)

matr[i][j] = 1;

else

matr[i][j] = 0;

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

matr[(mas - 1)][i] = v[i];

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

{

vect[0] = XY[i][0];

vect[1] = XY[i][1];

vect[2] = 1;

mult_matr(3, vect, matr);

XY[i][0] = vect[0];

XY[i][1] = vect[1];

}

}void _Vrashenie(double Gr)

{

matr[0][0] = Math.Cos(Math.PI * Gr / 180);

matr[1][1] = matr[0][0];

matr[2][2] = 1;

matr[0][1] = Math.Sin(Math.PI * Gr / 180);

matr[1][0] = -matr[0][1];

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

{

matr[2][i] = 0;

matr[i][2] = 0;

}

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

{

vect[0] = XY[i][0];

vect[1] = XY[i][1];

vect[2] = 1;

mult_matr(3, vect, matr);

XY[i][0] = vect[0];

XY[i][1] = vect[1];

}

}void _Mashtab(double X, double Y)

{

double[] vect_in = new double[3];

vect_in[0] = X;

vect_in[1] = Y;

vect_in[2] = 1;

int mas = 3;

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

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

if (i != j)

matr[i][j] = 0;

else

{

if (i == (mas - 1))

matr[i][j] = 1;

else

matr[i][j] = vect_in[i];

}

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

{

vect[0] = XY[i][0];

vect[1] = XY[i][1];

vect[2] = 1;

mult_matr(3, vect, matr);

XY[i][0] = vect[0];

XY[i][1] = vect[1];

}

}void _Otr()

{

int mas = 3;

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

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

if (i != j)

matr[i][j] = 0;

else

matr[i][j] = 1;

matr[1][1] = -1;

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

{

vect[0] = XY[i][0];

vect[1] = XY[i][1];

vect[2] = 1;

mult_matr(3, vect, matr);

XY[i][0] = vect[0];

XY[i][1] = vect[1];

}

}void mult_matr(int mas, double[] vect, double[][] matr)

{

double[] _v = new double[mas];

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

{

_v[i] = 0;

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

_v[i] += matr[j][i] * vect[j];

}

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

vect[i] = _v[i];

}void button3_Click(object sender, EventArgs e)

{

_Vrashenie(Convert.ToDouble(tbRotate.Text));

Graphics g = pictureBox1.CreateGraphics();

UpdateContext(g);

}void button4_Click(object sender, EventArgs e)

{

_Mashtab(Convert.ToDouble(tbMasX.Text), Convert.ToDouble(tbMasY.Text));

Graphics g = pictureBox1.CreateGraphics();

UpdateContext(g);

}void button5_Click(object sender, EventArgs e)

{

_Otr();

Graphics g = pictureBox1.CreateGraphics();

UpdateContext(g);

}

}

}


Министерство образования и науки РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Волгоградский г

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ