Помощь в написании студенческих работ
Антистрессовый сервис

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

КонтрольнаяПомощь в написанииУзнать стоимостьмоей работы

_Perenos (Convert.ToDouble (tbPerenosX.Text), Convert. ToDouble (tbPerenosY.Text)); Private void _DrawLine (Graphics g, double x1, double y1, double x2, double y2). _Mashtab (Convert.ToDouble (tbMasX.Text), Convert. ToDouble (tbMasY.Text)); Министерство образования и науки РФ. Private void pictureBox1_Paint (object sender, PaintEventArgs e). По курсу «Компьютерная графика». Public void mult_matr… Читать ещё >

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

  • Министерство образования и науки РФ
  • Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
  • Волгоградский государственный технический университет
  • Кафедра ЭВМ и систем
  • Семестровая работа
  • по курсу «Компьютерная графика»
  • Выполнила: студентка группы
  • ВЗК-382с Кравцова В.В.
  • Волгоград — 2014
  • 1. Задание
  • Разработать алгоритм и написать программу, реализующую базовые геометрические преобразования заданной фигуры.
  • Необходимо реализовать следующие преобразования:
  • — вращения;
  • — перенос;
  • — отражение;
  • — масштабирование.
  • Фигура — 2.
  • В соответствии с заданием была разработана программа, реализующая указанные четыре базовых преобразования.
  • Скриншот работы программы.
  • При запуске и нажатии кнопки «Начало», видим фигуру «2» недалеко от начала координат.
  • Рисунок 1
  • Для выполнения операции переноса необходимо ввести в соответствующие поля значения переноса по каждой из осей координат.
  • геометрический вращение масштабирование программа

Рисунок 2

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

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

Рисунок 3

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

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

Рисунок 4

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

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

Рисунок 5

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

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

using System;

using System.Collections.Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System.Windows.Forms;

namespace KG

{

public partial class Form1: Form

{

int x_mid, y_mid;

private double[][] XY;

int num_xy = 10;

double[] vect;

double[][] matr;

public Form1()

{

InitializeComponent ();

GraphBegin ();

}

private void button1_Click (object sender, EventArgs e)

{

GraphBegin ();

}

private void GraphBegin ()

{

Graphics g = pictureBox1. CreateGraphics ();

InitBukva ();

UpdateContext (g);

}

private void InitBukva ()

{

XY = new double[num_xy][];

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

XY[i] = new double[2];

XY[0][0] = 70; XY[0][1] = 20;

XY[1][0] = 20; XY[1][1] = 20;

XY[2][0] = 80; XY[2][1] = 100;

XY[3][0] = 70; XY[3][1] = 110;

XY[4][0] = 40; XY[4][1] = 110;

XY[5][0] = 30; XY[5][1] = 100;

vect = new double[3];

matr = new double[3][];

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

matr[i] = new double[3];

}

public 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);

}

private 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);

}

public void UpdateContext (Graphics g)

{

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

DrawBukva (g, XY);

}

private 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]);

}

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

{

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

}

private int ConvertX (double x)

{

return Convert. ToInt32(x) + x_mid;

}

private int ConvertY (double y)

{

return y_mid — Convert. ToInt32(y);

}

private void pictureBox1_Paint (object sender, PaintEventArgs e)

{

Graphics g = e. Graphics;

UpdateContext (g);

}

private void button2_Click (object sender, EventArgs e)

{

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

Graphics g = pictureBox1. CreateGraphics ();

UpdateContext (g);

}

private 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];

}

}

private 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];

}

}

private 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];

}

}

private 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];

}

}

public 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];

}

private void button3_Click (object sender, EventArgs e)

{

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

Graphics g = pictureBox1. CreateGraphics ();

UpdateContext (g);

}

private void button4_Click (object sender, EventArgs e)

{

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

Graphics g = pictureBox1. CreateGraphics ();

UpdateContext (g);

}

private void button5_Click (object sender, EventArgs e)

{

_Otr ();

Graphics g = pictureBox1. CreateGraphics ();

UpdateContext (g);

}

}

}

Показать весь текст
Заполнить форму текущей работой