Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсова.doc
Скачиваний:
15
Добавлен:
01.05.2015
Размер:
373.76 Кб
Скачать

2.1. Розробка алгоритму візуалізації графічного об’єкта

Виконання програми ґрунтується на тих же положеннях, що і всі інші базові перетворення комп’ютерної графіки, що властиві для використання DirectX для побудови яких би то ні було зображень на формі чи іншому об’єкті, що може бути використаний для цього.

Отже на першому етапі створенню програми є ініціалізація початкових координат графічної візуалізації, основна ідея полягає в залежності точок об’єкта від його межі, тому нам потрібно спочатку запрограмувати можливість динамічно змінювати точки самої межі об’єкта. Це дасть змогу змінити лише координати точок його межі, а координати точок візуалізації зміняться автоматично, оскільки вони залежать від координат межі.

На другому етапі ми програмуємо можливість зміни розташувань об’єкта, використовуючи значення різниць змін координат між теперішніми і попередніми.

2.1. Схемаалгоритму візуалізації графічного об’єкта.

2.2. Вимоги до апаратного і програмного забезпечення.

Основні вимоги:

  1. Процесор 2,51 ГГц;

  2. Windows XP, Windows 7 ;

  3. Наявність відеокарти з підтримкою DirectX7;

  4. Для повного перегляду проекту – наявність встановленої Visual Studio 2005, 2008, 2010;

  5. Мишка, клавіатура;

2.3. Інструкції користувача.

Для того, щоб переглянути візуалізований графічний об’єкт необхідно:

  1. Відкрити Visual Studio будь-якої версії (2005-2010);

  2. Через виконання послідовних команд File→Open→Project/Solution відкрити файл даного курсового проекту у папці Шклярчук Я. з назвою OGKG_KP;

  3. Далі натиснути кнопку Start Debugging, для того щоб переглянути візуалізований графічний об’єкт літери «С»;

  4. У формі, що з’явилася можна змінювати параметри ввівши необхідніо цифри в значення: обертання, перенесення, розтягнення та відображення.

ВИСНОВОК

Під час виконання даного курсового проекту були закріпленні знання, уміння практичних навичок візуалізації та їх реалізації на платформі .NET FrameWork2.0/3.5

Були розроблені Windows застосування візуалізації ліітери «С».

Курсовий проект надав можливість на практиці засвоїти основні концепції  проектування та створення  відображення, редагування, перетворення та документування графічної та символьної інформації для розв'язку прикладних задач, реалізованих у середовищі Visual Studio 2008/2010.

Виконання курсового проекту на тему: «Візуалізація графічних зображень» дало можливість ще раз переконатися у необхідності створення та візуалізації графічних об’єктів.

СПИСОК ЛІТЕРАТУРНИХ ДЖЕРЕЛ

  1. Веселовська Г.В., Ходаков В.Є., Веселовський В.М. В-38 Основи комп’єтерної графіки. Навчальний посібник/ Під ред. В.Є.Ходакова. – К.: Центр навчальної літератури, 2004.-392с.

  2. Прикладна геометрія та інженерна графіка: Міжвідомий науково-технічний збірник. – К.: КНУБА.

  3. Арбаш М. Таинства программирования графики. – К.: ЕвроСИБ, 2002. – 512 с.

  4. Галузинський Г.П., Гордієнко І.В. Сучасні технологічні засоби обробки інформації: Навч. посібник. – К.: КНЕУ, 1998. – 224с.

  5. Басюк Т.М. Аналіз та класифікація методів візуалізації // Поліграфія і видавнича справа. – 2003. – № 40. – С. 109–114с.

  6. Карнаухова Г.В.Обчислювальна геометрія та комп'ютерна графіка.Полтава.РВВ ПУСКУ,2008.-109с.

  7.  Вячеслав Понамарев, Программирование на C++/C# в Visual Studio.NET 2003: – Петербург: БХВ, 2004. – 352с.

ДОДАТОК А

Програмна реалізація візуального об’єкта:

using System;

using System.Drawing;

using System.Windows.Forms;

using Microsoft.DirectX;

using Microsoft.DirectX.Direct3D;

namespace OGKG_KP_Project1

{

public partial class Form1 : Form

{

private Panel1 d3d = new Panel1();// Stvoryuemo ekzemplyar klasu korustuva4a

public int rotateX, rotateY, rotateZ, transferA, transferB, transferC, extendX, extendY, extendZ;// zadaemo zminni

public float reflectX, reflectY, reflectZ;//

public Form1()//Opus elementiv golovnoi formu ta obrobnukiv podiy,inicializaciya po4atkovuh danuh

{

InitializeComponent();

d3d.BorderStyle = panel1.BorderStyle;

d3d.Location = panel1.Location;

d3d.ClientSize = panel1.ClientSize;

d3d.Cursor = panel1.Cursor;

this.Controls.Remove(panel1);

this.Controls.Add(d3d);

this.Load += new EventHandler(rotation_TextChanged);

this.Load += new EventHandler(transfer_TextChanged);

d3d.InitializeGraphics();

rotateX = (int)Convert.ToDouble(textBox1.Text);

rotateY = (int)Convert.ToDouble(textBox2.Text);

rotateZ = (int)Convert.ToDouble(textBox3.Text);

textBox1.TextChanged += new EventHandler(rotation_TextChanged);

textBox2.TextChanged += new EventHandler(rotation_TextChanged);

textBox3.TextChanged += new EventHandler(rotation_TextChanged);

transferA = (int)Convert.ToDouble(textBox4.Text);

transferB = (int)Convert.ToDouble(textBox5.Text);

transferC = (int)Convert.ToDouble(textBox6.Text);

textBox4.TextChanged += new EventHandler(transfer_TextChanged);

textBox5.TextChanged += new EventHandler(transfer_TextChanged);

textBox6.TextChanged += new EventHandler(transfer_TextChanged);

checkBox1.CheckedChanged += new EventHandler(reflection_CheckedChanged);

checkBox2.CheckedChanged += new EventHandler(reflection_CheckedChanged);

checkBox3.CheckedChanged += new EventHandler(reflection_CheckedChanged);

textBox7.TextChanged += new EventHandler(transfer_TextChanged);

textBox8.TextChanged += new EventHandler(transfer_TextChanged);

textBox9.TextChanged += new EventHandler(transfer_TextChanged);

}

private void rotation_TextChanged(object sender, EventArgs e)// Obrobnuk povorotu

{

if (textBox1.Text != "" && textBox1.Text != "-") { rotateX = (int)Convert.ToDouble(textBox1.Text); }

if (textBox2.Text != "" && textBox2.Text != "-") { rotateY = (int)Convert.ToDouble(textBox2.Text); }

if (textBox3.Text != "" && textBox3.Text != "-") { rotateZ = (int)Convert.ToDouble(textBox3.Text); }

if (textBox1.Text != "" && textBox1.Text != "-" && Convert.ToDouble(textBox1.Text) < -360) { textBox1.Text = "-360"; }

if (textBox2.Text != "" && textBox2.Text != "-" && Convert.ToDouble(textBox2.Text) < -360) { textBox2.Text = "-360"; }

if (textBox3.Text != "" && textBox3.Text != "-" && Convert.ToDouble(textBox3.Text) < -360) { textBox3.Text = "-360"; }

if (textBox1.Text != "" && textBox1.Text != "-" && Convert.ToDouble(textBox1.Text) > 360) { textBox1.Text = "360"; }

if (textBox2.Text != "" && textBox2.Text != "-" && Convert.ToDouble(textBox2.Text) > 360) { textBox2.Text = "360"; }

if (textBox3.Text != "" && textBox3.Text != "-" && Convert.ToDouble(textBox3.Text) > 360) { textBox3.Text = "360"; }

d3d.rotation(rotateX, rotateY, rotateZ);

}

private void transfer_TextChanged(object sender, EventArgs e)// Obrobnuk perenesennyz i roztyagnennya

{

if (textBox4.Text != "" && textBox4.Text != "-") { transferA = (int)Convert.ToDouble(textBox4.Text); }

if (textBox5.Text != "" && textBox5.Text != "-") { transferB = (int)Convert.ToDouble(textBox5.Text); }

if (textBox6.Text != "" && textBox6.Text != "-") { transferC = (int)Convert.ToDouble(textBox6.Text); }

if (textBox7.Text != "" && textBox7.Text != "-") { extendX = (int)Convert.ToDouble(textBox7.Text); }

if (textBox8.Text != "" && textBox8.Text != "-") { extendY = (int)Convert.ToDouble(textBox8.Text); }

if (textBox9.Text != "" && textBox9.Text != "-") { extendZ = (int)Convert.ToDouble(textBox9.Text); }

d3d.transfer(transferA, transferB, transferC);

d3d.extention(extendX, extendY, extendZ);

d3d.InitializeGraphics();

}

private void reflection_CheckedChanged(object sender, EventArgs e)// Obrobnuk vidobragennya

{

if (checkBox1.Checked) { reflectX = (float)Math.PI; } else { reflectX = 0; }

if (checkBox2.Checked) { reflectY = (float)Math.PI; } else { reflectY = 0; }

if (checkBox3.Checked) { reflectZ = (float)Math.PI; } else { reflectZ = 0; }

d3d.reflection(reflectX, reflectY, reflectZ);

}

private void panel1_Paint(object sender, PaintEventArgs e)

{

}

private void Form1_Load(object sender, EventArgs e)

{

}

}

public class Panel1 : Panel//opus clasu korustuva4a

{

public Panel1()//konstruktor formu

{

this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);

}

public int rotateX, rotateY, rotateZ, transferA, transferB, transferC, extendX, extendY, extendZ;

public float reflectX, reflectY, reflectZ;

public void rotation(int a, int b, int c) { rotateX = a; rotateY = b; rotateZ = c; }

public void transfer(int a, int b, int c) { transferA = a; transferB = b; transferC = c; }

public void reflection(float a, float b, float c) { reflectX = a; reflectY = b; reflectZ = c; }

public void extention(int a, int b, int c) { extendX = a; extendY = b; extendZ = c; }

private Device device = null;

private VertexBuffer vb = null;// polya ta inline-metodu clasu

public void InitializeGraphics()//metod inicializacii grafiku

{

PresentParameters pp = new PresentParameters();

pp.Windowed = true;

pp.SwapEffect = SwapEffect.Discard;

device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, pp);

vb = new VertexBuffer(typeof(CustomVertex.PositionColored), 56, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default);

vb.Created += new EventHandler(vb_Creating);

vb_Creating(vb, null);

}

void vb_Creating(object sender, EventArgs e)//Stvoryuemo koordunatu to4ok literu

{

VertexBuffer buffer = (VertexBuffer)sender;

CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[56];

verts[0] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[1] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

verts[2] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[3] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

verts[4] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[5] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

verts[6] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[7] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

verts[8] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[9] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

verts[10] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

verts[11] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[12] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

verts[13] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[14] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

verts[15] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[16] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

verts[17] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[18] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

verts[19] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[20] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[21] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[22] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[23] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[24] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[25] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[26] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[27] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[28] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[29] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[30] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[31] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[32] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[33] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[34] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[35] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[36] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[37] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

verts[38] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

verts[39] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

buffer.SetData(verts, 0, LockFlags.None);

}

private void SetupCamera()//nastroyka kameru

{

device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, (float)this.ClientSize.Width / (float)this.ClientSize.Height, 1.0f, 100.0f);

device.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, 15.0f), new Vector3(), new Vector3(0, 1, 0));

device.RenderState.Lighting = false;

device.Transform.World = Matrix.RotationYawPitchRoll(rotateX * (float)Math.PI / 180 + reflectX, rotateY * (float)Math.PI / 180 + reflectY, rotateZ * (float)Math.PI / 180 + reflectZ);

}

protected override void OnPaint(PaintEventArgs e)//zobrague literu

{

device.Clear(ClearFlags.Target, System.Drawing.Color.Black, 1.0f, 0);

SetupCamera();

device.BeginScene();

device.VertexFormat = CustomVertex.PositionColored.Format;

device.SetStreamSource(0, vb, 0);

device.DrawPrimitives(PrimitiveType.LineList, 0, 28);

device.EndScene();

device.Present();

this.Invalidate();

}

}

}

ДОДАТОК Б

Загальний вигляд літери:

Додаток В

І-41 080803 КП

Аркуш

27