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

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 21.01.2015
Размер файла 642,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

  • Министерство образования и науки РФ
  • Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
  • Волгоградский государственный технический университет
  • Кафедра ЭВМ и систем
  • Семестровая работа
  • по курсу «Компьютерная графика»
  • Выполнила: студентка группы
  • ВЗК-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);

}

}

}

Размещено на Allbest.ru


Подобные документы

  • Изучение истории развития компьютерной графики и особенностей её применения. Написание программы, реализующей смещение и поворот изображения на заданный градус по любой из осей координат. Обработка, хранение и передача сканируемых пиксельных изображений.

    практическая работа [361,4 K], добавлен 04.02.2013

  • Разработка программы в Turbo C++ Explorer для вычислений геометрических данных фигуры. Атрибуты объекта и представление данных в программе. Подпрограмма создания набора данных. Реализация защиты и правильности ввода данных и дополнительных функции.

    курсовая работа [5,9 M], добавлен 22.02.2014

  • Разработка база данных в виде таблицы, включающей поля: ФИО, адрес, номер телефона, наименование услуги, сумма оплаты, срок выполнения. Процедуры программы и соответствующие им пункты в меню. Описание исходных данных, интерфейса и работы каждой процедуры.

    курсовая работа [997,3 K], добавлен 08.06.2014

  • Разработка программы для отображения текущих значений полей файлового и необязательного заголовков и предоставление возможности изменения значений. Реализация файлового заголовка COFF для Windows поля и каталоги данных (адреса и размеры таблиц).

    курсовая работа [18,9 K], добавлен 23.06.2011

  • Принципы разработки и примеры работы программы, реализующей основные операции над базами данных (выбор, добавление, модификация и удаление данных), ее функциональные модели и блок-схемы. Особенности выполнения запроса и скорость операций обновления.

    курсовая работа [853,4 K], добавлен 25.01.2010

  • Индекс как объект базы данных, создаваемый с целью повышения производительности выполнения запросов. Реализация индексов структурой В-дерева. Создание программы-приложения, реализующей операцию селекции с помощью индексов. Примеры работы приложения.

    курсовая работа [371,1 K], добавлен 12.08.2011

  • Источники геоданных для геоинформационных систем, принципы их обработки. Технические средства переноса данных с бумажных карт. Технология векторизации данных. Обзор современных средств и технологий непосредственного ввода координат. Геокодирование.

    презентация [4,7 M], добавлен 02.10.2013

  • Основная цель этого блока, ввод данных для работы программы. Дополнительная цель, вывод информации. Два условия проверки вводимых данных. Первое условие проверки на количество точек. Второе, на правильность ввода координат точек. Созданные подпрограммы.

    лабораторная работа [154,3 K], добавлен 13.02.2009

  • Популярность систем автоматизированного проектирования электронных устройств. Знакомство с программой Micro-Cap - "Программой анализа схем на микрокомпьютерах". Условные графические обозначения некоторых компонентов схем. Ввод значений параметров.

    реферат [49,1 K], добавлен 12.03.2011

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

    курсовая работа [1,5 M], добавлен 16.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.