
- •До розрахунково-графічної роботи
- •2.1. Мета роботи...............................................................................................................................15
- •3.1. Мета роботи...............................................................................................................................17
- •4.1. Мета роботи...............................................................................................................................21
- •5.1. Мета роботи...............................................................................................................................21
- •Завдання
- •Календарний план
- •Індивідуальні завдання
- •Список скорочень
- •Розділ 1. Моделі геометрії просторових об’єктів
- •1.2. Комбінаційні моделі геометричного об’єкта Комбінаційна модель геометричного об’єкта
- •Розділ 2. Координатне перетворення
- •Розділ 3. Побудови кривих
- •Розділ 4 колірні моделі. Змішування кольорів
- •4.2. Розрахунок кольорів та колірних перетворень
- •1. Тексти програмної реалізації завдання:
- •Int main(void)
- •2. Результати виконання програми (PrintScreen):
- •Розділ 5 програмні реалізації
- •5.2. Програмна реалізація з OpenGl
- •InitializeComponent();
- •5.2.2 Віконні інтерфейси
- •5.3. Програмна реалізація з WinApi
- •5.3.1 Опис алгоритму
- •Interface
- •Image1: tImage;
- •Implementation
- •Var daDi:integer;
- •If Form1.CheckBox2.Checked then
- •5.3.2 Віконні інтерфейси
- •5.4. Програмна реалізація афінних перетворень та анімації
- •5.4.1 Опис алгоритму
- •2. Тексти програмної реалізації завдання:
- •Void drawB()
- •Void DrawObjects()
- •Int main( int argc, char *argv[])
- •5.4.2 Віконні інтерфейси
- •5.5. Програмні реалізація розрахунків кривих ліній, координат, кольорів
- •5.5.1 Опис алгоритмів
- •Int main(void)
- •5.5.2 Віконні інтерфейси
- •Висновки
- •Список використаних джерел
- •Додатки
- •InitializeComponent();
- •Interface
- •Image1: tImage;
- •Implementation
- •Var daDi:integer;
- •If Form1.CheckBox2.Checked then
- •Void drawB()
- •Void DrawObjects()
- •Int main( int argc, char *argv[])
- •Int main(void)
Додатки
Додаток А Тексти програми з OpenGL
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Tao.OpenGl;
namespace openGL_1
{
//структура Vertex2D реалізована в файлі Vertex2D.cs
//Vertex2D - сутність 2-вимірного вектора з операцією множення на скаляо
public partial class Form1 : Form
{
private readonly List<Vertex2D> _circle; //список вершини для інтерполяції кола
private readonly List<Vertex2D[]> _triangles; //список трикутників = список по 3 вершини
private const int Details = 60; //деталізація кола, 60 вершин
private const int TrianglesCount = 6; //кількість трикутників
private const double Radius1 = 0.8; //радіус першого кола
private const double Radius2 = 0.40; //радіус другого кола
public Form1()
{
InitializeComponent();
simpleOpenGlControl1.InitializeContexts(); //ініціалізація графічного пристрою
_circle = new List<Vertex2D>(); //ініціалізація списку вершин для інтерполяції кола
const double koef = Math.PI * 2 / Details;
for (var i = 0; i < Details; i += 1)
{
var a = i * koef;
_circle.Add(new Vertex2D(Math.Cos(a), Math.Sin(a)));
}
//запобігаємо виходу за межі масиву:
//додаєм прешу вершину ще раз в кінець для ілюзії замкненої фігури в наступному циклі.
//тобто остання вершина кола = перша вершина кола
_circle.Add(_circle[0]);
_triangles = new List<Vertex2D[]>(); //ініціалізація списку вершин трикутників
const int step = Details / TrianglesCount;
for (var i = 0; i < Details / step; ++i)
{
_triangles.Add(new Vertex2D[3]);
var pos = i * step;
_triangles[i][0] = _circle[pos] * Radius2;
_triangles[i][1] = _circle[pos + step / 2] * Radius1;
_triangles[i][2] = _circle[pos + step] * Radius2;
}
//видаляємо останню вершину, обскільки вона більше не потріба
//це не є обов’язковою операцією, але потрібно для оптимізації
_circle.RemoveAt(_circle.Count-1);
}
private void Draw()
{
Gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); //очищаємо поле
Gl.glLineWidth(3.0f); //товщина лінії = 3
Gl.glColor3f(0.53f, 0.81f, 0.92f); //колір лінії - відтінок синього
Gl.glBegin(Gl.GL_LINE_LOOP); //перше
foreach (var vertex in _circle) //коло
Gl.glVertex2d(vertex.X * Radius1, vertex.Y * Radius1); //радіусом Radius1
Gl.glEnd();
Gl.glBegin(Gl.GL_LINE_LOOP); //другк
foreach (var vertex in _circle) //коло
Gl.glVertex2d(vertex.X * Radius2, vertex.Y * Radius2); //радіусом Radius2
Gl.glEnd();
Gl.glColor3f(0.93f, 0.23f, 0.23f); //колір лінії - відтінок червоного
var angle = trackBar1.Value * 75.0 / trackBar1.Maximum; //кут повороту трикутників
foreach (var triangle in _triangles) //прохід через всі трикутники
{
var origin = triangle[0]; //точка відліку
Gl.glTranslated(origin.X, origin.Y, 0); //встановлюємо новий центр координат, зсовуємось в точку відліку
Gl.glRotated(angle, 0, 0, 1); //повертаємо на кут angle за часовою стрілкою
//малюємо трикутник
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glVertex2d(0, 0);
Gl.glVertex2d(triangle[1].X - triangle[0].X, triangle[1].Y - triangle[0].Y);
Gl.glVertex2d(triangle[2].X - triangle[0].X, triangle[2].Y - triangle[0].Y);
Gl.glEnd();
Gl.glRotated(-angle, 0, 0, 1); //повертаємо на кут angle проти часової стрілкою
Gl.glTranslated(-origin.X, -origin.Y, 0); //повертаємось у попередній центр координат
}
}
private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
{
Draw();
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
simpleOpenGlControl1.Refresh(); //обновляємо поле при зміні положення повзунка
}
}
}
Додаток Б Тексти програми з WinAPI
unit Unit1;