Разработка программы, реализующей базовые геометрические преобразования заданной фигуры
_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);
}
}
}