Демонстрация эффекта "альфа–смешения"
Разработка приложения для демонстрации эффекта "альфа-смешения" методом модульного и объектно-ориентированного программирования. Проектирование архитектуры программного продукта и пользовательского интерфейс. Описание алгоритма на естественном языке.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.04.2014 |
Размер файла | 474,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
3
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. ПОСТАНОВКА ЗАДАЧИ
1.1 Определение требований к программному средству и обозначение целей
1.2 Спецификация качества программного обеспечения
1.3 Функциональная спецификация
2. ПРОЕКТИРОВАНИЕ
2.1 Проектирование архитектуры приложения
2.2 Проектирование пользовательского интерфейса
3. ПРОГРАММИРОВАНИЕ
3.1 Спецификация классов
3.2 Описание алгоритма на естественном языке
4. ТЕСТИРОВАНИЕ ПРОГРАММЫ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ А
ПРИЛОЖЕНИЕ Б
программирование интерфейс алгоритм альфа смешение
ВВЕДЕНИЕ
Альфа-смешение (alpha blending) - техника создания эффекта полупрозрачности путем объединения исходного пиксела с пикселом, уже находящимся во фрейм- буфере. Каждому пикселу обычно ставится в соответствие значения красного, зеленого и синего компонентов цвета (R,G,B). Если ставится в соответствие еще альфа-значение, то говорят что пикселы имеют альфа-канал (компонент A в схеме ARGB).
Альфа-смешение представляет собой поточечное смешение данных исходного и фонового цветов. Каждый из трех компонентов (красный, зеленый, синий) исходного цвета смешивается с соответствующим компонентом фонового цвета.
Альфа-значение определяет степень прозрачности конкретного пиксела. Объекты могут иметь различную прозрачность, например стекло имеет высокий уровень прозрачности (и таким образом низкое альфа-значение), а желе - средний уровень. Альфа-смешение есть процесс комбинирования двух объектов на экране с учетом их альфа-каналов.
Альфа-смешение используется для: антиалиасинга, прозрачности, создания теней, зеркал, тумана. Алиасинг - результат сэмплинга, то есть преобразования непрерывного изображение в дискретное. Алиасинг ухудшает качество изображения, вызывая разнообразные артефакты: лестничный эффект, муар и шум. Антиалиасинг (anti - aliasing) призван нейтрализовать подобные артефакты и улучшить качество изображения
1. ПОСТАНОВКА ЗАДАЧИ
1.1 Определение требований к программному средству и обозначение целей
программирование интерфейс алгоритм альфа смешение
Целью данной курсовой работы является демонстрация эффекта альфа - смешения, его разновидностей и способов применения.
Сцена состоит из нескольких объектов, демонстрирующих эффект альфа - смешения: пирамида, алмаз, объемная трапеция. Объемная трапеция абсолютно непрозрачна (компонент альфа равен 255), пирамида и алмаз - прозрачны (компонент альфа равен 25). Между стенками расположен полупрозрачный куб (компонент альфа равен 150), в котором расположен алмаз (компонент альфа равен 185(эффект замутнения)), вокруг которого вращается камера. Движение камеры автоматизировано и происходит согласно таймеру.
Для реализации поставленной задачи в качестве инструментов разработки используется платформа .NETи язык программирования C#.
1.2 Спецификация качества программного обеспечения
Функциональность: программа должна являться полностью завершенным программным продуктом, не требующим каких-либо дополнительных специальных компонентов.
Надежность:
- программный продукт должен быть автономным;
Эффективность: программа должна предъявлять минимальные требования к аппаратному обеспечению, требования к аппаратным ресурсам должны быть намного ниже, чем для самой ОС. Дополнительные периферийныеустройстване должны задействоваться.
1.3 Функциональная спецификация
Технические характеристики для компьютера, на котором будет выполняться программа:
- компьютер/процессор: компьютер с процессором класса Pentium IV2 ГГц;
- память: 128МБОЗУ;
- монитор: монитор Super VGA с разрешением 1280x1024 точек или более высоким, поддерживающий 16 млн. цветов;
- операционная система: операционная система Windows 7,необходимо наличие Microsoft .NET Framework Version 4.
Внешние функции:
- программа должна быть удобна и приятна для просмотра;
2. ПРОЕКТИРОВАНИЕ
2.1 Проектирование архитектуры приложения
Данное программное средство имеет одну подсистему, которая является главной. В данном случае главной формой является форма Form1. Структура программы представлена на рисунке 1.
Размещено на http://www.allbest.ru/
3
Рисунок 1 - Структура программы
Программный модуль - модуль формы "Form1.cs" - реализует интерфейс программы, таймер для поворота камеры.
Модуль описания объектов "Class1.cs" -содержит информацию об объектах и методы графической обработки.
2.2 Проектирование пользовательского интерфейса
Главная форма Form1.cs реализует интерфейс программы. Основным элементом на форме является окно изображения, на котором рисуется трёхмерное изображение. Листинг формы Form1.cs представлен в приложении А.
ФормаForm1.cs представлена на рисунке 2.
Рисунок 2 - Общий вид программы
3. ПРОГРАММИРОВАНИЕ
3.1 Спецификацияклассов
В процессе выполнения поставленной задачи были разработаны классы, реализующие базовые понятия, такие как:
1) structPoint - структура, описывающая точки в пространстве.
Поля:
? poligonlist - содержитполигон, описанный вершинами точек;
? realpointslis - содержитпреобразованное изображение на полигоне;
? pointslist - содержитизначальное изображение на полигоне;
? sdviglist - содержит сортированные друг-за-другом полигоны
Методы:
? SotrPoligons - сортирует полигоны для отрисовки видимых и невидимых;
? SetColor - устанавливает изначальный цвет полигона.
2) ClassGraphicObject - класс, описывающий преобразованное изображение.
Поля:
? x - содержиткоординату x изображения;
? y - содержиткоординату y изображения;
? z - содержиткоординату z изображения;
Свойства:
? sdvig-считает по координатам полигоны, идущие друг за другом;
? viewtransformation-преобразует ортогональную проекцию в перспективную;
? Find - возвращает значение "true" или "false",в зависимости от того, собран ключ игроком или нет;
3) Scen - класс, описывающий перерисовку изображения на форму.
Поля:
? listobjects - содержит массив,описывающий объекты для перерисовки .
Методы:
? Clear - заливает форму белым цветом;
? FillPolygon - заполняет полигоны пересчитанным изображением;
? DrawPolygon - рисует на полигонах черную рамку;
? FillPolygonBrush - задаёт кисти для закраски пересчитанное изображение;
? Draw() - рисует изображение.
4) Program- базовый класс, производящий все основные расчёты и отрисовку сцены.
Методы:
- Initialize() - метод, инициализирующий основные объекты, функции и процедуры.
3.2 Описание алгоритма на естественном языке
Алгоритм заключается в том, что сначала создаются массивы из вершин фигур, затем вершины соединяются по три или более точек, образуя полигон. Затем Полигоны сортируются по дальности, и на ближних полигонах отрисовываются дальние полигоны в пределах видимости полигона и цвет дальних полигонов складывается в RGBмодели, получая новый цвет. Затем ортогональная проекция преобразовывается в видовую и отрисовывается на предварительно очищенном фоне.
Эффект альфа - смешения реализуется за счет изменения альфа компоненты RGBмодели при отрисовке.
На рисунке 3 представлена блок-схема разработанного приложения.
Рисунок 3 - Блок-схемаприложения
На рисунке 4 представлена блок-схема алгоритма рисования изображения
Рисунок 4 - Блок-схема алгоритма рисования изображения
4. ТЕСТИРОВАНИЕ
Для тестирования программы производилсяпросмотр изображения под различными ракурсами. При тестировании ошибок выявлено не было.
На рисунках 5, 6 и 7 представлен вид сцены в различных показательных ракурсах.
Рисунок 5 - Вид со стороны непрозрачной стенки
Рисунок 6 - Вид со стороны прозрачной стенки
Рисунок 7 - Вид сбоку
Результаты тестирования показали, что программа отвечает всем заявленным требованиям.По рассмотренным выше методикам программа тестировалась много раз в течение всего процесса изготовления программного продукта. Все тесты были пройдены.
ЗАКЛЮЧЕНИЕ
В рамках курсовой работы было разработано приложение для демонстрации эффекта "Альфа - смешения". В процессе проектирования использовались методологии модульного и объектно-ориентированного программирования.
Для разработки данной программы, нужно было изучить и понять методы алгоритмизации, программирования, общей и компьютерной геометрии и графики, такие, как:
- Построение ортогональной и видовой проекции трёхмерного объекта;
- Сортировка полигонов;
- Смешивание цветов.
Таким образом, заданная тема реализована в полном объеме.
При разработке данного программного средства применялся язык программирования С#, как один из наиболее современных и перспективных языков программирования.
ПРИЛОЖЕНИЕ А
ЛистингформыForm1.cs
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 WindowsFormsApplication4
{
publicpartialclassForm1 : Form
{
public Form1()
{
InitializeComponent();
}
privatevoid Form1_Load(object sender, EventArgs e)
{
Scen.outPutPictureBox = pictureBox1;
Scen.iniTestObject();
timer1.Interval = 1;
timer1.Start();
}
double fi = 0;
double alfa = 0;
double r = 20;
int x, y, z = 0;
double fi1 = 0;
double r1 = 25;
double alfa1 = 0;
privatevoid timer1_Tick(object sender, EventArgs e)
{
GraphicObject.teta += 0.01;
GraphicObject.fi = 250;
int x1 = (int)(Math.Cos(alfa) * r * Math.Cos(fi));
int y1 = (int)(Math.Sin(alfa) * r * Math.Cos(fi));
int z1 = (int)(r * Math.Sin(fi));
alfa += Math.PI / 90;
x = x1;
y = y1;
z = z1;
int xx1 = (int)(Math.Cos(alfa1) * r1 * Math.Cos(fi1));
int yy1 = (int)(Math.Sin(alfa1) * r1 * Math.Cos(fi1));
int zz1 = (int)(r1 * Math.Sin(fi1));
alfa1 -= Math.PI / 120;
Scen.Draw();
}
}
}
ПРИЛОЖЕНИЕБ
ЛистингклассаClass1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication4
{
publicstructPoint
{
publicint x, y, z;
public Point(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
publicclassPoligon
{
static Poligon()
{
poligonsList = newList<Poligon>();
realPointsList = newList<Point>();
pointsList = newList<Point>();
sdvidList = newList<Point>();
}
publicstaticList<Poligon> poligonsList;
publicstaticList<Point> pointsList;
publicstaticList<Point> realPointsList;
publicstaticList<Point> sdvidList;
publicstaticList<Poligon> sortPoligonsList;
publicstaticvoid SortPolygons(bool flg)
{
if (flg)
{
sortPoligonsList = newList<Poligon>();
for (int i = 0; i < poligonsList.Count; i++)
{
sortPoligonsList.Add(poligonsList[i]);
}
}
else
{
sortPoligonsList = newList<Poligon>();
for (int i = 0; i < poligonsList.Count; i++)
{
if (true)
{
sortPoligonsList.Add(poligonsList[i]);
}
}
}
Poligon temp;
for (int i = 0; i < sortPoligonsList.Count - 1; ++i)
{
int current = i;
for (int j = i + 1; j < sortPoligonsList.Count; ++j)
{
if (Poligon.sortPoligonsList[current].z >Poligon.sortPoligonsList[j].z)
{ current = j; }
}
if (current != i)
{
temp = sortPoligonsList[i];
sortPoligonsList[i] = sortPoligonsList[current];
sortPoligonsList[current] = temp;
}
}
}
publicstaticint maxHeight, maxWidth = 100;
public System.Drawing.Color Color;
publicvoid SetColor(System.Drawing.Color Color)
{
this.Color = Color;
}
publicstaticint nextStartIndexPoint
{
get
{
return realPointsList.Count;
}
}
publicstaticint nextStartIndexPoligon
{
get
{
return poligonsList.Count;
}
}
publicList<int> points;
public System.Drawing.Point[] drawPoints
{
get
{
System.Drawing.Point[] p = new System.Drawing.Point[points.Count];
for (int i = 0; i < points.Count; i++)
p[i] = new System.Drawing.Point((int)(Math.Round(GraphicObject.d * ((double)pointsList[points[i]].x / pointsList[points[i]].z)) + maxWidth / 2), (int)(Math.Round(GraphicObject.d * ((double)pointsList[points[i]].y / pointsList[points[i]].z)) + maxHeight / 2));
return p;
}
}
publicdouble z
{
get
{
int _z = 0;
for (int i = 0; i < points.Count; i++)
_z += pointsList[points[i]].z;
return _z / points.Count;
}
}
public Poligon(int A, int B, int C, int D)
{
points = newList<int>();
points.Add(A);
points.Add(B);
points.Add(C);
points.Add(D);
Color = System.Drawing.Color.Black;
Poligon.poligonsList.Add(this);
}
public Poligon(List<int> points)
{
this.points = points;
Color = System.Drawing.Color.Black;
Poligon.poligonsList.Add(this);
}
public Poligon(List<int> points, System.Drawing.Color Color)
{
this.points = points;
this.Color = Color;
Poligon.poligonsList.Add(this);
}
}
publicclassGraphicObject
{
publicint startIndexPoint = 0;
publicint startIndexPoligon = 0;
publicint countPoint = 0;
publicint countPoligon = 0;
publicint x
{
set
{
for (int i = startIndexPoint; i < startIndexPoint + countPoint; i++)
{
Poligon.realPointsList[i] = newPoint(Poligon.realPointsList[i].x + value, Poligon.realPointsList[i].y, Poligon.realPointsList[i].z);
}
}
}
publicint y
{
set
{
for (int i = startIndexPoint; i < startIndexPoint + countPoint; i++)
{
Poligon.realPointsList[i] = newPoint(Poligon.realPointsList[i].x, Poligon.realPointsList[i].y + value, Poligon.realPointsList[i].z);
}
}
}
publicint z
{
set
{
for (int i = startIndexPoint; i < startIndexPoint + countPoint; i++)
{
Poligon.realPointsList[i] = newPoint(Poligon.realPointsList[i].x, Poligon.realPointsList[i].y, Poligon.realPointsList[i].z + value);
}
}
}
publicPoint sdvig
{
set
{
for (int i = startIndexPoint; i < startIndexPoint + countPoint; i++)
Poligon.sdvidList[i] = value;
}
}
publicPoint[] realPoint
{
get
{
Point[] result = newPoint[countPoint];
returnPoligon.realPointsList.Skip(startIndexPoint).Take(countPoint).ToArray();
}
set
{
int j = 0;
for (int i = startIndexPoint; i < startIndexPoint + countPoint; i++)
{
Poligon.realPointsList[i] = value[j];
j++;
}
}
}
staticpublicdouble fi, teta, Ro, d;
publicdouble fiObject, tetaObject = 0;
public GraphicObject(List<Point> pointsList, List<List<int>> poligonsList)
{
startIndexPoint = Poligon.nextStartIndexPoint;
startIndexPoligon = Poligon.nextStartIndexPoligon;
countPoint = pointsList.Count;
countPoligon = pointsList.Count;
Poligon.pointsList.AddRange(pointsList);
Poligon.realPointsList.AddRange(pointsList);
for (int i = 0; i < countPoligon; i++)
{
for (int j = 0; j < poligonsList[i].Count; j++)
poligonsList[i][j] += startIndexPoint;
newPoligon(poligonsList[i]);
}
}
public GraphicObject(List<Point> pointsList, List<List<int>> poligonsList, System.Drawing.Color ColorPollygons)
{
startIndexPoint = Poligon.nextStartIndexPoint;
startIndexPoligon = Poligon.nextStartIndexPoligon;
countPoint = pointsList.Count;
countPoligon = poligonsList.Count;
Poligon.pointsList.AddRange(pointsList);
Poligon.realPointsList.AddRange(pointsList);
for (int i = startIndexPoint; i < countPoint + startIndexPoint; i++)
{
Poligon.sdvidList.Add(newPoint());
}
for (int i = 0; i < countPoligon; i++)
{
for (int j = 0; j < poligonsList[i].Count; j++)
poligonsList[i][j] += startIndexPoint;
newPoligon(poligonsList[i], ColorPollygons);
}
}
publicvoid ViewTransformation()
{
for (int i = startIndexPoint; i < startIndexPoint + countPoint; i++)
{
int x = (int)(Math.Round((Poligon.realPointsList[i].x + Poligon.sdvidList[i].x) * (-1 * Math.Sin(teta + tetaObject)) + (Poligon.realPointsList[i].y + Poligon.sdvidList[i].y) * Math.Cos(teta + tetaObject)));
int y = (int)(Math.Round((Poligon.realPointsList[i].x + Poligon.sdvidList[i].x) * (-1 * Math.Cos(fi + fiObject) * Math.Cos(teta + tetaObject)) - (Poligon.realPointsList[i].y + Poligon.sdvidList[i].y) * (Math.Cos(fi + fiObject) * Math.Sin(teta + tetaObject)) + (Poligon.realPointsList[i].z + Poligon.sdvidList[i].z) * Math.Sin(fi + fiObject)));
int z = (int)(Math.Round((Poligon.realPointsList[i].x + Poligon.sdvidList[i].x) * (-1 * Math.Sin(fi + fiObject) * Math.Cos(teta + tetaObject)) - (Poligon.realPointsList[i].y + Poligon.sdvidList[i].y) * (Math.Sin(fi + fiObject) * Math.Sin(teta + tetaObject)) - (Poligon.realPointsList[i].z + Poligon.sdvidList[i].z) * (Math.Cos(fi + fiObject)) + Ro));
Poligon.pointsList[i] = newPoint(x, y, z);
}
}
static GraphicObject()
{
teta = 0;
fi = 0;
Ro = 500;
d = 500;
}
}
publicclassScen
{
staticpublic System.Drawing.Graphics g;
staticpublic System.Drawing.Bitmap bitmap;
static System.Windows.Forms.PictureBox pictureBox;
publicstatic System.Windows.Forms.PictureBox outPutPictureBox
{
set
{
pictureBox = value;
Poligon.maxHeight = pictureBox.Height;
Poligon.maxWidth = pictureBox.Width;
bitmap = new System.Drawing.Bitmap(Poligon.maxWidth, Poligon.maxHeight);
g = System.Drawing.Graphics.FromImage(bitmap);
}
get
{
return pictureBox;
}
}
publicstaticList<GraphicObject> listObjects = newList<GraphicObject>();
publicstaticvoid iniTestObject()
{
List<Point> newListPoints = newList<Point>();
int k = 10;
newListPoints = newList<Point>();
newListPoints.Add(newPoint(27, -27, 0));
newListPoints.Add(newPoint(27, 27, 0));
newListPoints.Add(newPoint(-27, 27, 0));
newListPoints.Add(newPoint(-23, -27, 0));
newListPoints.Add(newPoint(40, 0, 0));
newListPoints.Add(newPoint(0, 40, 0));
newListPoints.Add(newPoint(-40, 0, 0));
newListPoints.Add(newPoint(0, -40, 0));
newListPoints.Add(newPoint(27/2, -27/2, 8));
newListPoints.Add(newPoint(27/2, 27/2, 8));
newListPoints.Add(newPoint(-27/2, 27/2, 8));
newListPoints.Add(newPoint(-23/2, -27/2, 8));
newListPoints.Add(newPoint(40/2, 0, 8));
newListPoints.Add(newPoint(0, 40/2, 8));
newListPoints.Add(newPoint(-40/2, 0, 8));
newListPoints.Add(newPoint(0, -40/2, 8));
listObjects.Add(newGraphicObject(newListPoints, newList<List<int>> {
(newList<int>() { 0, 8, 12, 4}),(newList<int>() { 4, 12, 9, 1}),(newList<int>() { 1, 9, 13, 5}),(newList<int>() { 5,13, 10, 2}),
(newList<int>() { 2, 10, 14, 6}),(newList<int>() { 6, 14, 11, 3}),(newList<int>() { 3, 11, 15, 7}),(newList<int>() { 7, 15, 8, 0}),
(newList<int>() { 8, 12, 9, 13, 10, 14, 11, 15 }), },
System.Drawing.Color.FromArgb(185, 255, 255, 255)));
newListPoints = newList<Point>();
newListPoints.Add(newPoint(27, -27, 0));
newListPoints.Add(newPoint(27, 27, 0));
newListPoints.Add(newPoint(-27, 27, 0));
newListPoints.Add(newPoint(-23, -27, 0));
newListPoints.Add(newPoint(40, 0, 0));
newListPoints.Add(newPoint(0, 40, 0));
newListPoints.Add(newPoint(-40, 0, 0));
newListPoints.Add(newPoint(0, -40, 0));
newListPoints.Add(newPoint(0, 0, 5* -k));
listObjects.Add(newGraphicObject(newListPoints, newList<List<int>> {
(newList<int>() { 8, 4, 0 }), (newList<int>() { 8, 1, 4 }), (newList<int>() { 8, 5, 1 }), (newList<int>() { 8, 2, 5 }),
(newList<int>() { 8, 6, 2 }), (newList<int>() { 8, 3, 6 }), (newList<int>() { 8, 7, 3 }), (newList<int>() { 8, 0, 7 }), },
System.Drawing.Color.FromArgb(185, 255, 255, 255)));
newListPoints = newList<Point>();
newListPoints.Add(newPoint(90, -90, 90));
newListPoints.Add(newPoint(90, 90, 90));
newListPoints.Add(newPoint(-90, 90, 90));
newListPoints.Add(newPoint(-90, -90, 90));
newListPoints.Add(newPoint(90, -90, -90));
newListPoints.Add(newPoint(90, 90, -90));
newListPoints.Add(newPoint(-90, 90, -90));
newListPoints.Add(newPoint(-90, -90, -90));
listObjects.Add(newGraphicObject(newListPoints, newList<List<int>> { (newList<int>() { 0, 1, 2, 3 }), (newList<int>() { 4, 5, 6, 7 }), (newList<int>() { 0, 1, 5, 4 }), (newList<int>() { 0, 3, 7, 4 }), (newList<int>() { 2, 3, 7, 6 }), (newList<int>() { 1, 2, 6, 5 }) }, System.Drawing.Color.FromArgb(150, 255, 0, 0)));
newListPoints = newList<Point>();
newListPoints.Add(newPoint(150, -100, 100));
newListPoints.Add(newPoint(150, 100, 100));
newListPoints.Add(newPoint(160, 100, 100));
newListPoints.Add(newPoint(160, -100, 100));
newListPoints.Add(newPoint(150, -100, -100));
newListPoints.Add(newPoint(150, 100, -100));
newListPoints.Add(newPoint(160, 100, -100));
newListPoints.Add(newPoint(160, -100, -100));
listObjects.Add(newGraphicObject(newListPoints, newList<List<int>> { (newList<int>() { 0, 1, 2, 3 }), (newList<int>() { 4, 5, 6, 7 }),
(newList<int>() { 0, 1, 5, 4 }),
(newList<int>() { 0, 3, 7, 4 }),
(newList<int>() { 2, 3, 7, 6 }),
(newList<int>() { 1, 2, 6, 5 })
}, System.Drawing.Color.FromArgb(255, 0, 200, 100)));
newListPoints = newList<Point>();
newListPoints.Add(newPoint(-150, -100, 100));
newListPoints.Add(newPoint(-150, 100, 100));
newListPoints.Add(newPoint(-160, 100, 100));
newListPoints.Add(newPoint(-160, -100, 100));
newListPoints.Add(newPoint(-150, -100, -100));
newListPoints.Add(newPoint(-150, 100, -100));
newListPoints.Add(newPoint(-160, 100, -100));
newListPoints.Add(newPoint(-160, -100, -100));
listObjects.Add(newGraphicObject(newListPoints, newList<List<int>> { (newList<int>() { 0, 1, 2, 3 }), (newList<int>() { 4, 5, 6, 7 }), (newList<int>() { 0, 1, 5, 4 }), (newList<int>() { 0, 3, 7, 4 }), (newList<int>() { 2, 3, 7, 6 }), (newList<int>() { 1, 2, 6, 5 })
}, System.Drawing.Color.FromArgb(100, 0, 0, 255)));
int R = 100;
int r = 50;
int fi = 10;
int psi = 20;
int XX = (int)(R + r * Math.Cos(fi) * Math.Cos(psi));
int YY = (int)(R + r * Math.Cos(fi) * Math.Sin(psi));
int ZZ = (int)(r * Math.Sin(fi));
newListPoints = newList<Point>();
newListPoints.Add(newPoint(XX, YY, ZZ));
}
staticpublicvoid Draw()
{
g.Clear(System.Drawing.Color.Black);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
//g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
for (int i2 = 0; i2 < listObjects.Count; i2++)
listObjects[i2].ViewTransformation();
Poligon.SortPolygons(false);
for (int i = Poligon.sortPoligonsList.Count - 1; i >= 0; i--)
{
System.Drawing.SolidBrush fillPolygonBrush;
fillPolygonBrush = new System.Drawing.SolidBrush(Poligon.sortPoligonsList[i].Color);
g.FillPolygon(fillPolygonBrush, Poligon.sortPoligonsList[i].drawPoints);
g.DrawPolygon(new System.Drawing.Pen(System.Drawing.Color.Azure), Poligon.sortPoligonsList[i].drawPoints);
}
pictureBox.Image = bitmap;
}
}
}
Размещено на Allbest.ru
...Подобные документы
Понятие компьютерной графики. Реализация альфа-смешения. Демонстрация свойств прозрачных тел: отображение непрозрачного предмета сквозь прозрачный и сокрытие прозрачного предмета (или его части) за непрозрачным. Описание используемых алгоритмов.
курсовая работа [2,0 M], добавлен 12.01.2013Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам.
курсовая работа [782,4 K], добавлен 26.05.2014Характеристика объектно-ориентированного, процедурного, функционального программирования. Выбор языка программирования для создания программного обеспечения для управления справочником "Спортсмены". Алгоритм работы приложения, пользовательский интерфейс.
курсовая работа [1,6 M], добавлен 23.02.2016Анализ целевой аудитории. Функциональные характеристики пользовательского приложения. Разработка алгоритмов и интерфейса программного продукта, функций рабочей области. Написание скриптов на языке C#. Тестирование программы методом чёрного ящика.
дипломная работа [1,5 M], добавлен 09.11.2016Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.
курсовая работа [2,6 M], добавлен 17.11.2014Разработка программы для рисования различных правильных многоугольников с помощью объектно-ориентированного языка программирования. Использование для разработки среды C++ Builder 6 и библиотеки VCL. Разработка интерфейса приложения и алгоритма его работы.
курсовая работа [616,4 K], добавлен 18.10.2010Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.
курсовая работа [275,9 K], добавлен 22.12.2011Специальное и общесистемное программное обеспечение. Разработка диаграммы прецедентов, классов, деятельности, состояний. Детальная реализация функциональных частей программного обеспечения. Разработка пользовательского интерфейса, методика испытаний.
курсовая работа [3,3 M], добавлен 26.01.2013Проектирование программного комплекса на языке С++ с использованием принципов объектно-ориентированного программирования. Разработка разных меню, помогающих пользователю работать с программой. Описание процесса формирования статистики по памятникам.
курсовая работа [799,9 K], добавлен 01.12.2016Анализ предметной области "Конкурс поэтов" на основе объектно-ориентированного подхода. Разработка оконного приложения и описание информационной модели предметной области. Описание разработанных процедур С++ и результатов тестирования приложения.
курсовая работа [355,9 K], добавлен 18.06.2013Элементы объектно-ориентированного программирования. Среда Visual Studio: улучшения интегрированной среды разработки и увеличение ее производительности. Проектирование архитектуры программы и ее интерфейса. Использование двухуровневой системы приложения.
курсовая работа [516,8 K], добавлен 09.08.2015Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.
курсовая работа [1,8 M], добавлен 16.09.2015Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.
контрольная работа [25,1 K], добавлен 14.03.2015Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.
контрольная работа [60,1 K], добавлен 17.01.2011Программная реализация настольного приложения с использованием языка программирования C#. Проектирование и структура пользовательского интерфейса, требования к нему и оценка функциональности. Разработка руководства пользователя и его использование.
курсовая работа [297,6 K], добавлен 10.03.2015Проектирование структуры и архитектуры программного продукта. Реализация программы конвертера файлов баз данных. Описание пользовательского интерфейса. Выбор порядка конвертации dbf файлов. Создание и исполнение шаблонов. Расчет себестоимости продукта.
дипломная работа [2,2 M], добавлен 21.06.2013Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.
курсовая работа [1,2 M], добавлен 04.08.2014Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".
курсовая работа [966,9 K], добавлен 11.02.2016Проектирование вариантов использования приложения. Анализ существующей версии приложения. Обоснование выбора инструментальных программных средств. Проектирование интерфейса пользователя. Адаптация под мобильные устройства. Описание программного продукта.
курсовая работа [2,8 M], добавлен 25.06.2017Разработка приложения для работы с базой данных с использованием объектно-ориентированного и визуального программирования. Обзор языка элементов языка программирования Delphi. Проектирование базы данных автозаправки. Клиентская система приложения.
курсовая работа [2,3 M], добавлен 31.01.2016