МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
Кафедра САПР
Розрахункова робота
по курсу “Геометричне моделювання у конструюванні інженерних об’єктів і систем”
.
ЛЬВІВ 2005
Національний університет “Львівська політехніка”
/назва вищого учбового закладу/
Кафедра ”Системи автоматизованого проектування”
Дисципліна “Геометричне моделювання у конструюванні інженерних об’єктів та систем”
Спеціальність інформаційні технології проектування
Курс 4 Група КН-46 Семестр 8
Завдання
на графічно-розрахункову роботу студента
Кривого Ростислава Зіновійовича /прізвище, ім’я, по батькові/
1. Тема проекту /роботи/ Розробка комплексної геометричної моделі просторового
об’єкта та її реалізація програмними засобами
Термін здачі студентом закінченого проекту /роботи/ 20.05.2005
Вихідні дані для проекту /роботи/ ескізне видове зображення
просторового інженерного об’єкта
4. Зміст розрахунково-пояснюючої записки /перелік питань, які підлягають розробці/
Алгоритм розв’язку завдання (словесний покроковий опис чи блок-схеми). Комбінаційна модель геометричного об’єкта з графічною побудовою. Каркасна модель геометричного об’єкта з графічною побудовою. Матриця суміжності з відповідною нумерацією вершин графа та зазначенням її на графічній побудові. Матриця інцеденції з відповідною нумерацією вершин та дуг графа та зазначенням її на графічній побудові. Визначення придатної для розробки та реалізації розробленої моделі системи координат та перетворення системи координат. Математичне задання класичних кривих (окружність, еліпс, гіпербола, парабола, кардіоїда тощо), які використовуються у геометричному моделюванні. Побудувати криву Без’є на основі шести вершин багатокутника, яка описує елемент геометрії об’єкта побудови. Здійснити опис визначених колірних областей об’єкту засобами колірних моделей, здійснити перевід кольору з одної колірної моделі в іншу. Реалізувати програмно побудову кривих засобами графічних функції Windows-інтерфейса (WinAPI). Розробити алгоритм афінних перетворень геометричних елементів об’єкту та запрограмувати анімацію. Реалізувати програмно з використанням OpenGL
5. Перелік графічного матеріалу /з точним зазначенням обов’язкових креслень/
Комбінаційна модель геометричного об’єкта. Каркасна модель геометричного об’єкта. Графічні побудови кривих у визначеній системі(-ах) координат. Результати графічної програмної побудови.
6. Дата видачі завдання 22.02.2005 Календарний план
№
п-п
Назва етапів роботи
Термін виконання
етапів роботи
Примітка
Ознайомитися зі засобами опису та задання моделей геометрії просторових об’єктів
22.02.2005 - 14.05.2005
Критичне опрацювання інформаційних джерел за напрямками
Критичний аналіз та обрання напрямку реалізації завдання
Виокреслення задач, розробка плану-алгоритму розробки
Побудова комбінаційної моделі геометричного об’єкта з графічною побудовою
Побудова каркасної моделі геометричного об’єкта з графічною побудовою
Побудова матриці суміжності з відповідною нумерацією вершин графа та зазначенням її на графічній побудові
Побудова матриці інцеденції з відповідною нумерацією вершин та дуг графа та зазначенням її на графічній побудові
Визначення придатної для розробки та реалізації розробленої моделі системи координат та перетворення системи координат.
Математичне задання класичних кривих (окружність, еліпс, гіпербола, парабола, кардіоїда тощо), які використовуються у геометричному моделюванні
Побудова кривої Без’є на основі шести вершин багатокутника, яка описує елемент геометрії об’єкта побудови
Опис визначених колірних областей об’єкту засобами колірних моделей, здійснення переводу кольору з одної колірної моделі в іншу.
Реалізація програмної побудови кривих засобами графічних функції Windows-інтерфейса (WinAPI).
Розробка алгоритму афінних перетворень геометричних елементів об’єкту та програмування анімації
Програмна реалізація з використанням OpenGL
Оформлення звіту до роботи
Студент
/підпис/ /прізвище, ім’я, по батькові/
Керівник
/підпис/ /прізвище, ім’я, по батькові/
“22” 02 2005_ р.
Вступ
Машинна графіка ще відносно молода, і відповідним тут є стандарт, що саме розвивається. Тиск головним чином відчувається з боку виробників CAD систем - кошти просторового моделювання вже стали повсякденним інструментом для багатьох інженерів і проектувальників. Однак протягом останніх 15-20 років складність моделей постійно зростала, і на сьогодні склалася ситуація, при якій прогресивні форми організації проектування (робота з великим збиранням) лімітуються можливостями сучасного графічного обладнання і ПО інтерактивній візуалізаціи.
Комп'ютерна графіка - авангард комп'ютерних технологій - нараховує в своєму розвитку не більше за десятку років. А її комерційним додаткам - і того менше. Андриес ван Дам вважається одним з батьків комп'ютерної графіки, а його книги - фундаментальними підручниками по всьому спектру технологій, встановлених в основу машинної графіки. Також в цій області відомий Айвен Сазерленд, чия докторська дисертація з'явилася теоретичною основою машинної графіки.
Така зміна ситуації зумовлена декількома причинами. Передусім, внаслідок різкого поліпшення співвідношення вартість/продуктивність для деяких компонент апаратури комп'ютерів. Крім того, стандартне програмне забезпечення високого рівня для графіки стало широкодоступным, що спрощує написання нових прикладних програм, переносимих з комп'ютерів одного типу на інші.
Наступна причина зумовлена впливом, який дисплеї надають на якість інтерфейсу - кошти спілкування між людиною і машиною, - забезпечуючи максимальні зручності для користувача. Нові, зручні для користувача системи побудовані в основному на підході WYSIWYG(абревіатура від англійського вираження "What you see is what you get" - "Що бачите, то і маєте"), відповідно до якого зображення на екрані повинне бути як можна більш схожим на те, яке в результаті друкується.
Більшість традиційних додатків машинної графіки є двомірними. Останнім часом, однак, відмічається зростаючий комерційний інтерес до трьохмірних додатків. Він викликаний значним прогресом, досягнутим в минулому десятиріччі в розв'язанні двох взаємопов'язаних проблем: моделювання трьохмірних сцен і побудови як можна більш реалістичного зображення. Наприклад, в імітаторах польоту особливе значення додається часу реакції на команди, що вводяться пілотом і інструктором. Щоб створювалася ілюзія плавного руху, імітатор повинен породжувати надзвичайно реалістичну картину "світу", що динамічно змінюється з частотою як мінімум 30 кадрів в секунду. У протилежність цьому зображення, що застосовуються в рекламі і індустрії розваг, обчислюють автономно, нерідко в течії годин, з метою досягнути максимального реалізму або справити сильне враження.
Завдання
Просторовий об’єкт – спортивний тренажер.
а) Визначити полярні координати точки що симетрична відносно полярної вісі точки А(1;П/4);
б) Задані точки А(+2), В(-7). Визначити координати цих точок при умові, що одиниця довжини буде взята так, що е’:e=3:8
в) Полярна вісь полярної системи координат паралельна вісі абсцис декартової прямокутної системи та направлення однаково з нею. Задані декартові прямокутні координати полюса О(-1;1) та полярні координати точки D(2;2/3П). Визначити координати цієї точки у декартовій прямокутній системі.
г) Перевести координати точки Р з однорідного представлення у вигляді (4,4,4,4) в систему афінних координат.
д) Вісі декартової системи координат повернути на кут (=500. Координати точок В((6;-5) та С(-4*(3;4) визначено у новій системі координат. Обчислити координати цих точок у старій системі координат.
Скласти рівняння окружності, яка проходить через три точки: А(0;+2), В(+1;+1), С(+2;-2).
Побудувати криву Без’є на основі шести вершин багатокутника, що заданий точками з координатами: P0[7,16], Р1[15,16], Р2[5,12], Р3[2,7], Р4[6,3], Р5[10,2].
Змішати два кольори: перший - номер варіанту; другий – номер варіанту +35 у рівних співвідношеннях і провести перетворення кольору з RGB => HLS;
Написати програму із застосуванням графічних функцій WinApi, яка дозволяє візуалізувати графіки функцій з можливостями маштабування у вікні на певному інтервалі. Застосувати функції зміни кольору, штриховки, зафарбувати замкнутих областей, текстових підписів, виводу координатної сітки. Організувати вивід графіки у зовнішній метафайл. Побудувати в різних областях екрана графіки функцій Y(x) і YN(x).Графік функції YN(x) будується для трьох і чотирьох членів розкладання функцій Y(x) у ряд Тейлора.
Y(x)=ch(x); Y3(x)=1+x2/2(+x4/4; Y4(x)=1+x2/2(+x4/4(+x6/6; x=[/3;3].
Написати імітаційну програму з застосуванням афінних перетворень,яка дозволяє в автоматичному режимі та при ручному керуванні створювати динамічно змінну візуалізацію при якій моделюється набір кіл випадкового радіуса і розташування. Потім радіуси кіл починають зростати. При торкані кіл менша знищується, при торкані краю екрану центр кола починає зростати.
Написати програму із застосуванням 2D графічних функцій Open GL, яка дозволяє візуалізувати у одиничній віконній формі програми гроно винограду з листком.
Розв’язки
В основі 3D моделювання лежать певні принципи побудови моделей, зокрема побудова об’єкта повинна здійснюватися від глобальних елементів зображення до локальних, тобто деталізація загального об’єкту пустопово повинна збільшуватися.
Звичайно даного правило не завжди дотримуються, але як при створеннях ігор, так і при моделюванні сцен високого рівня, всюди йде мова про якість зображення уявного світу, якість уявного світу формують не тільки деталізація об’єктів, з яких він складається, але і «гра» світла.
Кожна поверхня повинна бути наділена властивостями поводження із світлом яке на неї падає, наприклад у мультимедійних зйомках приділяють досить таки багато уваги, наприклад якщо проводити зйомку темному приміщені без освітлення результат буде 0. Якщо проводити зйомку навпроти джерела світла, відповідно джерело світла заглушить відбите світло від інших об’єктів.
Щоб більш краще показати в якому порядку повино створюватися під об’єкти нашого об’єкту, на малюнку присвоєно їм порядковий номер.
Комбінаційна модель геометричного об’єкта з графічною побудовою
…
П1
П2
П3
…
Пn
І таким методом ми розбиваємо складну деталь на комбінацію більш простіших елементів.
Оскільки в нашому випадку усі деталі необхідно додавати, відповідно це можна записати наступною формулою.
Каркасна модель геометричного об’єкта з графічною побудовою
В найпростішому випадку, більшу частину побудови ми складаємо із циліндрів, відповідно основна фігура є циліндр.
Ознайомитись із моделями, які використовуються при геометричному проектуванні. Вивчити методи опису поверхонь складних форм.
Матриця інцеденції і суміжності
R1
R2
R3
V1
V2
V1
V2
V1
R1
R2
-
-
V2
R3
R3
в нас є три точки , через які проходить дане коло :
A[0;2]
B[1;1]
С[2;-2]
(x+3)2+(y+2)2=25
a) Визначаємо полярні координати точки що симетрична відносно полярної вісі точки А(1;П/4);
А(1;П/4)(А’(1;7П/4)
б) Визначаємо координати точок А(+2), В(-7) при умові, що одиниця довжини буде взята так, що е’:e=3:8
А(+2), В(-7) x/2=3/8 A ( x=3/4 B ( x=-2,625
в) Визначити координати точки D(2;2/3П) у декартовій прямокутній системі.
AO=DO*cos300 DA=DO*sin300 x=-2
AO=(3 DA=2*1/2=1 y=(3+1=2,7 D(-2;2,7)
г) Переводимо координати точки Р з однорідного представлення у вигляді (4,4,4,4) в систему афінних координат і обчислюємо координати точок В((6;-5) та С(-4*(3;4) у старій системі координат. Вісі декартової системи координат повертаємо на кут (=500
(4,4,4,4)=(1,1,1) W=4
B((6;-5) x=x’*cos(-y’*sin(
C(-4(3;4) y=x’*sin(+ y’cos(
(=500
X=(6*cos500-(-5)sin500=(6*0.64 + 5*0.77=5.4
Y=(6*sin500-5*cos500=(6*0.77 - 5*0.64=1.9-3.2=-1.3
Координати точки В у старій системі координат: В(5.4; -1.3)
X=-4(3*cos500-4*sin500=-6,9*0.64 - 4*0.77=-7.5
Y=-4(3*sin500-4*cos500=-4(3*0.77 + 4*0.64=-2.7
Координати точки C у новій системі координат: С(-7,5; -2,7)
Побудувати криву Без’є на основі шести вершин багатокутника, що заданий точками з координатами: P0[8,4], P1[1,6], P2[4,12], P3[9,14], P4[15,6], P5[11,16].
РОЗВЯЗОК ЗАВДАННЯ
Програма для змішування двох будб-яких кольорів:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
Button2: TButton;
Panel2: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Button3: TButton;
Panel3: TPanel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Col1,Col2:TColor;
function darker(color:TColor; Per:Byte):Tcolor;
function lighter(color:TColor; Per:Byte):Tcolor;
function mix(c1,c2:Tcolor):TColor;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
r,g,b:byte;
S_r,S_g,S_b:string;
begin
x:=StrToInt(Edit1.Text);
Col1:=darker(clDkGray,x);
Panel1.color:=Col1;
r:=GetRValue(Col1);
g:=GetGValue(Col1);
b:=GetBValue(Col1);
S_r:=IntToHex(r,2);
S_b:=IntToHex(b,2);
S_g:=IntToHex(g,2);
Panel1.Caption:=S_r+' '+S_g+' '+S_b
end;
Function darker(color:TColor; Per:Byte):Tcolor;
var r,g,b:byte;
Begin
color:=colorToRGB(color);
r:=GetRValue(Color);
g:=GetGValue(Color);
b:=GetBValue(Color);
r:=r-muldiv(r,Per,100);
g:=g-muldiv(g,Per,100);
b:=b-muldiv(b,Per,100);
Result:=RGB(r,g,b);
End;
procedure TForm1.Button2Click(Sender: TObject);
var x:integer;
r,g,b:byte;
S_r,S_g,S_b:string;
begin
x:=StrToInt(Edit2.Text);
Col2:=darker($00FAE6E6,x);
Panel2.color:=Col2;
r:=GetRValue(Col2);
g:=GetGValue(Col2);
b:=GetBValue(Col2);
S_r:=IntToHex(r,2);
S_b:=IntToHex(b,2);
S_g:=IntToHex(g,2);
Panel2.Caption:=S_r+' '+S_g+' '+S_b
end;
Function lighter(color:TColor; Per:Byte):Tcolor;
var r,g,b:byte;
Begin
color:=colorToRGB(color);
r:=GetRValue(Color);
g:=GetGValue(Color);
b:=GetBValue(Color);
r:=r+muldiv(255-r,Per,100);
g:=g+muldiv(255-g,Per,100);
b:=b+muldiv(255-b,Per,100);
Result:=RGB(r,g,b);
End;
procedure TForm1.Button3Click(Sender: TObject);
var r,g,b:byte; x:integer;
S_r,S_g,S_b:string;
begin
x:=mix(Col1,Col2);
panel3.Color:=x;
r:=GetRValue(x);
g:=GetGValue(x);
b:=GetBValue(x);
S_r:=IntToHex(r,2);
S_b:=IntToHex(b,2);
S_g:=IntToHex(g,2);
Panel3.Caption:=S_r+' '+S_g+' '+S_b
end;
function mix(c1,c2:Tcolor):TColor;
Begin
result:= RGB (
trunc((1/3)*GetRValue(c1)+(2/3)*GetRValue(c2)),
trunc((1/3)*GetGValue(c1)+(2/3)*GetGValue(c2)),
trunc((1/3)*GetBValue(c1)+(2/3)*GetBValue(c2))
)
End;
end.
Будуємо в різних областях екрану графіки функцій, YN(x) . Графік функції YN(x) будується до трьох і чотирьох членів розкладання функції YN(x) у ряд Тейлора.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ColorBox1: TColorBox;
ComboBox1: TComboBox;
TrackBar1: TTrackBar;
ColorBox3: TColorBox;
ComboBox3: TComboBox;
ColorBox2: TColorBox;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const z_y=150;
z_x=10;
procedure TForm1.Button1Click(Sender: TObject);
var dc,dc2:hdc;
pn:hPen;
br:hbrush;
dov,vus,x,y:integer;
t:real;
begin
dov:=300;
vus:=300;
dc:=GETdc(0);
createMetaFile('File_Roman_Vova.wmf');
pn:=CreatePen(ps_solid,comboBox1.ItemIndex,colorBox1.Selected);
br:=CreateHatchBrush(6,colorBox2.Selected);
selectObject(dc,pn);
selectObject(dc,br);
rectangle(dc,z_x,z_y,z_x+dov,z_y+vus);
pn:=CreatePen(ps_solid,1,rgb(255,0,0));
selectObject(dc,pn);
//--------Координатна сітка
movetoex(dc,z_x,z_y+(vus div 2),nil);
lineto(dc,z_x+dov,z_y+(vus div 2));
movetoex(dc,z_x+(dov div 2),z_y,nil);
lineto (dc,z_x+(dov div 2),z_y+vus);
//-------------------------
t:=-3;
case combobox3.ItemIndex+1 of
1:begin
x:=round(t*trackbar1.Position);
y:=round(((exp(t)+exp(-t))/2)*trackbar1.Position);
end;
2:begin
x:=round(t*trackbar1.Position);
y:=round((1+t*t/2+t*t*t*t/(2*3*4))*trackbar1.Position);
end;
3:begin
x:=round(t*trackbar1.Position);
y:=round((1+t*t/2+t*t*t*t/(2*3*4)+t*t*t*t*t*t/(2*3*4*5*6))*trackbar1.Position);
end;
end;
pn:=CreatePen(ps_solid,1,colorbox3.Selected);
selectObject(dc,pn);
movetoex(dc,x+z_x+dov div 2,y+z_y+vus div 2,nil);
while t<3 do
begin
case combobox3.ItemIndex+1 of
1:begin
x:=round(t*trackbar1.Position);
y:=round(((exp(t)+exp(-t))/2)*trackbar1.Position);
end;
2:begin
x:=round(t*trackbar1.Position);
y:=round((1+t*t/2+t*t*t*t/(2*3*4))*trackbar1.Position);
end;
3:begin
x:=round(t*trackbar1.Position);
y:=round(1+t*t/2+t*t*t*t/(2*3*4)+t*t*t*t*t*t/(2*3*4*5*6))*trackbar1.Position;
end;
end;
lineto(dc,x+z_x+dov div 2,y+z_y+vus div 2);
t:=t+0.1;
end;
closemetafile(dc);
releaseDC(handle,dc);
deleteDC(dc);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Left:=0;
form1.Top:=0;
end;
end.
Програма з застосуванням афіних перетворень, яка дозволяє в автоматичному режимі та при ручному керуванні створювати динамічно змінну візуалізацію при якій моделюється обертання чотирикутної зірки.
Program aaa;
uses graph,crt;
var Gm,Gd,n,i,j,k,xc,yc:integer;
xa,ya:array[1..50] of real;
x,y:array [1..50] of integer;
a, b, r:array [1..3,1..3] of real;
c:char;
{--------------------------------------------------------------}
Procedure I_R;
var i,j:integer;
begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
r[i,j]:=0 ;
r[i,i]:=1
end;
end;
{--------------------------------------------------------------}
Procedure MULT;
var z:real;
i,j,k:integer;
Begin
for i:=1 to 3 do
for j:=1 to 3 do
begin
z:=0;
for k:=1 to 3 do
z:=z+a[i,k]*r[k,j];
b[i,j]:=z;
end;
for i:=1 to 3 do
for j:=1 to 3 do
r[i,j]:=b[i,j]
end;
{--------------------------------------------------------------}
Procedure NEW_XY;
var i:integer;
Begin
for i:=1 to n do
begin
x[i]:=round(xa[i]*r[1,1]+ya[i]*r[1,2]+r[1,3]);
y[i]:=round(xa[i]*r[2,1]+ya[i]*r[2,2]+r[2,3])
end
End;
{-------------------------------------------------------------}
Procedure TRAN(dx,dy:real);
var i,j:integer;
Begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
a[i,j]:=0;
a[i,i]:=1;
end;
a[1,3]:=dx;
a[2,3]:=dy;
MULT
end;
{------------------------------------------------------------}
Procedure SCALE(sx,sy:real);
var i,j:integer;
Begin
for i:=1 to 3 do
for j:=1 to 3 do
a[i,j]:=0;
a[1,1]:=sx;
a[2,2]:=sy;
a[3,3]:=1;
MULT;
End;
{-----------------------------------------------------------}
Procedure ROTATE(alfa:real);
var c,s:real;
i,j:integer;
Begin
for i:=1 to 3 do
for j:=1 to 3 do
a[i,j]:=0;
a[3,3]:=1;
c:=cos(alfa);
a[1,1]:=c;
a[2,2]:=c;
s:=sin(alfa);
a[1,2]:=-s;
a[2,1]:=s;
MULT;
End;
{---------------------------------------------------------}
Procedure LOOK(alfa, dx, dy, sx, sy :real);
var xx, yy:real;
i:integer;
Begin
I_R;
ROTATE(alfa);
TRAN(dx,dy);
SCALE(sx,sy);
for i:=1 to n do
Begin
xx:=xa[i]*r[1,1]+ya[i]*r[1,2]+r[1,3];
yy:=xa[i]*r[2,1]+ya[i]*r[2,2]+r[2,3];
xa[i]:=round(xx);
ya[i]:=round(yy);
End;
I_R;
End;
{--------------------------------------------------------}
Procedure PICT(color:word);
var i:integer;
Begin
setcolor(color);
if (color>0) then NEW_XY;
moveto(x[n],y[n]);
for i:=1 to n do
lineto(x[i],y[i]);
End;
{-------------------------------------------------------}
Procedure RS(beta, kx, ky:real);
var xm,ym:real;
i:integer;
Begin
xm:=0; ym:=0;
for i:=1 to n do
begin
xm:=xm+x[i];
ym:=ym+y[i];
end;
xm:=xm/n;
ym:=ym/n;
TRAN(-xm,-ym);
ROTATE(beta);
SCALE(kx,ky);
TRAN(xm,ym);
End;
{------------------------------------------------------}
Procedure ROT_XY(xc,yc,beta:real);
begin
TRAN(-xc,-yc);
ROTATE(beta);
TRAN(xc,yc);
end;
{-----------------------------------------------------}
Procedure AXES(alfa,beta:real);
var i,j:integer;
begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
a[i,j]:=0;
a[i,i]:=1;
end;
a[1,2]:=sin(beta)/cos(beta);
a[2,1]:=sin(alfa)/cos(alfa);
MULT;
end;
{----------------------------------------------------}
procedure MIRROR(delta:real; index:byte);
var i,j:integer;
Begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
a[i,j]:=0;
a[i,i]:=1;
end;
a[index,index]:=-1;
a[index,3]:=2*delta;
MULT
end;
{*****************************************************}
procedure cir;
begin
PICT(0);
PICT(14);
TRAN(3,2);
ROT_XY(xc,yc,-0.1);
delay(5000);
end;
{*****************************************************}
Begin
n:=9;
xa[1]:=310; ya[1]:=160;
xa[2]:=320; ya[2]:=130;
xa[3]:=330; ya[3]:=160;
xa[4]:=360; ya[4]:=170;
xa[5]:=330; ya[5]:=180;
xa[6]:=320; ya[6]:=210;
xa[7]:=310; ya[7]:=180;
xa[8]:=280; ya[8]:=170;
xa[9]:=310; ya[9]:=160;
Gd:=Detect;
InitGraph(Gd,Gm,'');
LOOK(0,0,-200,1,-1);
PICT(14);
I_R;
xc:=320;
yc:=240;
repeat
c:=readkey;
if c=#32 then cir
else repeat
cir
until keypressed;
until c=#27;
End.
Програма із застосуванням 2D графічних функцій бібліотеки OpenGL , яка дозволяє візуалізувати у одиночному вікні програми штангельциркуль.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OpenGL, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private