Научная статья на тему 'Использование алгоритма Брезенхема для построения заданной фигуры'

Использование алгоритма Брезенхема для построения заданной фигуры Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
350
22
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
BREZENSHEM'S ALGORITHM

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ананьева Марина Алексеевна

В компьютерной графике рассматриваются растровые алгоритмы. Приводится программа построения заданной фигуры по алгоритму Брезенхема. При построении заданной фигуры используются (сплошные линии, пунктирные линии), окружность, эллипс. Алгоритмы растровой развёртки линии, окружности, эллипса описывается в [1]. Для устранения ступенчатости при построении линейных функций (линий), а также конических сечений(окружностей, эллипсов, парабол, гипербол) можно воспользоваться алгоритмом Брезенхема.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Ананьева Марина Алексеевна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

USE OF BREZENSHEIM’S ALGORITHM FOR KNOWLEDGE SETING FIGURE

In computer graphics consider bit-mapped algorithms. Result in program knowledge of setting figure by Brezenshem’s algorithm.When acquisition of figure use(solid lines, stroke lines), circle, ellipse. The algorithm bitmapped scan lines, circle, ellipse describe in [1].For removal jagging by construction linear function (line), a also canonical bifurcation(circle, ellipse, parabola, giperbola) one can use from Brezenshem’s algorithm.

Текст научной работы на тему «Использование алгоритма Брезенхема для построения заданной фигуры»

Тип TsProject содержит идентификатор проекта для удобной идентификации в код, имен (работное и потребительское), универсальный идентификатор (ID).

IV. Выводы

Разработанный модул предоставляеть возможность для проведения обновления программных приложений, которые связаны с одной или более баз данных Firebird и Interbase. Дана возможность для разши-рения применимости модуля к другим базам данных, при включении съответствующих библиотек для выполнения скриптов.

Достигнуты дополнительные требования безопасности процесса. Модуль работает безупречно при нормальных условиях, предлагая механизмы для предотвращения потери данных.

Предусмотрено создание резервной копии до запуска процесса, не допуская возможность ошибки от технической проблемы в сети.

Приняты дополнительные меры для обеспечения безопасности процесса путем удостоверения в целостности загруженной информации с использованием хэш-суммы.

Предусмотрен дополнительный модуль для создания и коррекции XML файлы со структурой, необходимой для правильной работы модуля.

Не предусмотрен способ для ограничения доступа к файлам в самом модуле. Можно добавить это в будущем, или воспользоваться возможностями FTP-сервера, чтобы создать правила доступа по сетевом адресе и / или по управлении пользователями сети.

V. Список литературы

[1] Канту, М., Mastering Delphi 4. СофтПрес-ООД , 2010

[2] Schow, P. H., Son-Bell, M. A., Williams, G. A., Meske, C. F., & Markel, A. (2007). Патент № US 2007/0234331 A1. United States of America.

[3] Marmaros, D., Lawrence, S. R., Ionescu, M. F., Wang, N., & Khan, O. H. (2012). Патент № US 8,321,858 B1. United States of America.

[4] Shahindoust, A., & Yeung, M. (2012). Патент № US 8,225,304 B2. United States of America

ИСПОЛЬЗОВАНИЕ АЛГОРИТМА БРЕЗЕНХЕМА ДЛЯ ПОСТРОЕНИЯ

ЗАДАННОЙ ФИГУРЫ

Ананьева Марина Алексеевна

старший преподаватель кафедры прикладной математики Московский Государственный Университет информационных технологий, радиотехники и электроники МИРЭА

г. Москва

USE OF BREZENSHEIM'S ALGORITHM FOR KNOWLEDGE SETING FIGURE

Ananieva Marina, older teacher

of chair application mathematics

of Moskow State University

information technology,

radio-technology and electronics

MIREA, MOSCOW

АННОТАЦИЯ

В компьютерной графике рассматриваются растровые алгоритмы. Приводится программа построения заданной фигуры по алгоритму Брезенхема. При построении заданной фигуры используются (сплошные линии, пунктирные линии), окружность, эллипс. Алгоритмы растровой развёртки линии, окружности, эллипса описывается в [1]. Для устранения ступенчатости при построении линейных функций (линий), а также конических сечений(окружностей, эллипсов, парабол, гипербол) можно воспользоваться алгоритмом Брезенхема . ABSTRACT

In computer graphics consider bit-mapped algorithms. Result in program knowledge of setting figure by Brezenshem's algorithm . When acquisition of figure use(solid lines, stroke lines), circle, ellipse. The algorithm bitmapped scan lines, circle, ellipse describe in [1].For removal jagging by construction linear function (line), a also canonical bifurcation(circle, ellipse, parabola, giperbola) one can use from Brezenshem's algorithm . Ключевые слова: алгоритм Брезенхема Keyword: Brezenshem's algorithm

//программа написана на языке ния C++Builder6

#include <vcl.h>

#pragma hdrstop

#include<math.h>

#define C_M Canvas->MoveTo

#define C_L Canvas->LineTo

#define C_P_C Canvas->Pen->Color #"define"C_P_W"Ca"nvas->P"en->WTdth" #define C_T Canvas->TextOutA #define C_P Canvas->Pixels #define R_B RGB(200,200,200) #define cW clWhite #define cB clBlack

#define R_G clMaroon #include "lab4_36.h" #pragma package(smart_init) #pragma resource "*.dfm" TForml *Form1; int mx=30,my=30;

_fastcall TForml ::TForm1(TComponent*

Owner)

: TForm(Owner)

_______________Ц______________________________________________________________________________________________________

void_fastcall TForm1::ShowGrid(int cenx)

{int x,y;

C_P_C=(TColor)R_B;

11горизонтальные линии сетки

for(y=0;y<=18*my;y+=my)

{C_M(0,y);C_L(28*mx,y);}

/Вертикальные линии сетки

for(x=0;x<=28*mx;x+=mx)

{C_M(x,0);C_L(x,18*my);}}

void_fastcall TForm1 ::XoY(int cenx, int ceny)

{Носи I¡ось X C_P_W=2;

C_M(cenx-9*mx,ceny); C_L(cenx+9*mx,ceny);

IIстрелка

C_M(cenx+8.5*mx,ceny-0.25*my);C_L(cenx+9*mx,ceny);

C_L(cenx+8.5*mx,ceny+0.25*my); C_T(cenx+8. 5 *mx,ceny-1*my,"X");

I/ось Y

C_M(cenx,ceny-8.8*my);C_L(cenx,ceny+8.8*my);

IIстрелка

C_M(cenx-0.25*mx,ceny-8.3*my);C_L(cenx,ceny-8.8*my);

C_L(cenx+0.25*mx,ceny-8.3*my);C_T(cenx+0.5*mx,ceny-8.9*my,"Y"); C_P_W=1;}

void_fastcall TForm1::line(int x1, int y1, int x2,

int y2,int color)

{int x,y,dx,dy,sx,sy,d,d1,d2,e,e2;

dx=abs(x2-x1);dy=abs(y2-y1);

sx=x1<x2?1:-1;sy=y1<y2?1:-1;

e=dx-dy;

for(;;)

{C_P[x1][y1]=(TColor)color; if (x1==x2 && y1==y2) break; e2=e*2; if (e2>-dy) { e-=dy; x1+=sx; } if (e2<dx)

{ e+=dx; y1+=sy; } }}

void _fastcall TForm1::DrawArc(int cenx, int

ceny, int radx, int rady,

bool dotted, int color)

{int x,y;int a2,b2,d,e;

x=0;y=rady;

if (radx==rady)

{a2=1;b2=1;}

else

{a2=radx*radx; b2=rady*rady; }

d=b2-2*a2*rady+a2; e=0; int counter=0; while (y>=0)

{if (dotted && ((counter %20) !=9) && ((counter %20) !=10) && ((counter % 20)

!=11)) DrawDot(cenx,ceny,x,y,color); if (!dotted) DrawDot(cenx,ceny,x,y,color); ++counter;

Iошибка для случая 1 или2 e=2*(d+a2*y)-a2; if (d<0 && e<=0) {IIшаг mh

++x; d+=2*b2*x+b2; continue; }

Iошибка для случая 4 или 5

e=2*(d-b2*x)-b2;

IIшаг mv

if(d>0 && e>0)

{--y; d+=a2-2*a2*y;

continue; }

Ншаг md

++x; d+=2*(b2 *x-a2 *y)+a2+b2;

_________________--y;}}_____________________________________________________________________________________________

void _fastcall TForm1::DrawDot(int cenx, int

ceny, int x, int y, int color)

{C_P[cenx+x][ceny+y]=(TColor)color; C_P[cenx+x][ceny-y]=(TColor)color; C_P[cenx-x][ceny+y]=(TColor)color; C_P[cenx-x] [ceny-y]=(TColor)color; }

void_fastcall TForm1::DrawArc_1(int cenx, int

ceny, int radx, int rady,

bool dotted, int color)

{int x,y;int a2,b2,d,e;

x=0;y=rady;

if (radx==rady)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

{a2=1;b2=1;}

else

{a2=radx*radx;b2=rady*rady; } d=b2-2*a2*rady+a2; e=0; int counter=0; while (y>=0)

{ if (!dotted && (counter % 8==0)) Draw-Dot_1(cenx,ceny,x,y,color); ++counter;

Iошибка для случая 1 или2 e=2*(d+a2*y)-a2; if (d<0 && e<=0) {Iшаг mh

++x; d+=2*b2*x+b2; continue; }

Iошибка для случая 4 или 5

e=2*(d-b2*x)-b2;

IIшаг mv

if(d>0 && e>0)

{--y; d+=a2-2*a2*y;

continue; }

Iшаг md

++x; d+=2*(b2 *x-a2 *y)+a2+b2;

_________________--y;}}_____________________________________________________________________________________________

void_fastcall TForm1::DrawDot_1(int cenx, int

ceny, int x, int y, int color)

{C_P[cenx+x][ceny+y]=(TColor)color;

C_P[cenx+x][ceny-y]=(TColor)color; C_P[cenx-x][ceny+y]=(TColor)color; C_P[cenx-x][ceny-y]=(TColor)color; line(cenx-x,ceny-y,cenx-x,ceny,R_G); line(cenx+x,ceny,cenx+x,ceny-y,R_G);}

void_fastcall TForm1::DrawArc_2(int cenx, int

ceny, int radx, int rady,

bool dotted, int color) {int x,y;int a2,b2,d,e; x=0;y=rady; if (radx==rady) {a2=1;b2=1;} else

{a2=radx*radx;b2=rady*rady; } d=b2-2*a2*rady+a2; e=0; int counter=0; while (y>=0)

{ if (!dotted && (counter % 8==0)) Draw-Dot_2(cenx,ceny,x,y,color); ++counter;

Пошибка для случая 1 или2 e=2*(d+a2*y)-a2; if (d<0 && e<=0) {//шаг mh

++x; d+=2*b2*x+b2; continue; }

//ошибка для случая 4 или 5

e=2*(d-b2*x)-b2;

//шаг mv

if(d>0 && e>0)

{--y; d+=a2-2*a2*y;

continue; }

//шаг md

++x; d+=2*(b2*x-a2*y)+a2+b2;

--yi }}

void_fastcall TForm1::DrawDot_2(int cenx, int

ceny, int x, int y, int color)

{C_P[cenx+x][ceny+y]=(TColor)color; C_P[cenx+x][ceny-y]=(TColor)color; C_P[cenx-x][ceny+y]=(TColor)color; C_P[cenx-x][ceny-y]=(TColor)color; line(cenx-x,ceny,cenx-x,ceny+y,R_G); line(cenx+x,ceny,cenx+x,ceny+y,R_G);}

void _fastcall TForm1::FormPaint(TObject

*Sender)

{Color=(TColor)cW;

int xc=14*mx,yc=9*my,r1=8*my,i;

int a=8*mx,b=3.5*my,a1=5.25*mx,b1=1.5*my;

ShowGrid(xc);

DrawArc(xc,yc,r1,r1,true,cB); DrawArc(xc,yc,a,b,false,cB); DrawArc(xc,yc-5.75*my,a1,b1,false,R_G); DrawArc(xc+1,yc-5.75*my+1,a1,b1,false,R_G); DrawArc(xc+1,yc-5.75*my-1,a1,b1,false,R_G); DrawArc(xc,yc+5.75*my,a1,b1,false,R_G); DrawArc(xc+1 ,yc+5.75*my+ 1,a1,b1 ,false,R_G); DrawArc(xc+ 1,yc+5.75*my-1,a1,b1 ,false,R_G); //наклонные линии //1

line(xc-7.2*mx,yc-3.5*my,xc+7.2*mx,yc+3.5*my,R_G);

line(xc-7. 2*mx- 1,yc-3.5*my+1 ,xc+7. 2 *mx-1,yc+3.5*my+1,R_G);

line(xc-7. 2*mx- 1,yc-3.5 *my+2,xc+7. 2 *mx-1,yc+3.5*my+2,R_G);

//2

line(xc+7.2*mx,yc-3.5*my,xc-7. 2 *mx,yc+3. 5 *my,R_G);

line(xc+7.2*mx-1 ,yc-3. 5*my+1,xc-7.2*mx-1,yc+3.5*my+1,R_G);

line(xc+7.2*mx-1 ,yc-3. 5*my+2,xc-7.2*mx-1,yc+3.5*my+2,R_G);

//горизонтальные линии //1

line(xc-7.2*mx,yc-3.5*my,xc+7.2*mx,yc-3.5*my,R_G);

line(xc-7.2*mx-1,yc-3.5*my-1,xc+7.2*mx-1,yc-3.5*my-1,R_G);

line(xc-7. 2*mx- 1,yc-3.5*my+1 ,xc+7. 2 *mx-1 ,yc-3.5*my+1,R_G); //2

line(xc-

7. 2 *mx,yc+3.5*my,xc+7.2*mx,yc+3. 5 *my,R_G);

line(xc-7.2* mx- 1,yc+3.5*my-1,xc+7.2* mx-1,yc+3.5*my-1,R_G);

line(xc-7.2*mx-1,yc+3.5*my+1,xc+7.2*mx-1,yc+3.5*my+1,R_G); //3

line(xc-5. 3 5*mx,yc-5.75 *my,xc+5.35*mx,yc-5.75*my,R_G);

line(xc-5.35*mx-1,yc-5.75*my-1,xc+5.35*mx-1,yc-5.75*my-1,R_G);

line(xc-5. 3 5*mx-1,yc-5.75*my+1,xc+5.35*mx-1,yc-5.75 *my+1,R_G); //4

line(xc-

5.35 *mx,yc+5.75*my,xc+5.35 *mx,yc+5.75*my,R_G);

line(xc-5. 3 5*mx-1,yc+5.75*my-1,xc+5. 3 5 *mx-1,yc+5.75*my-1,R_G);

line(xc-5. 3 5*mx-1,yc+5.75*my+1,xc+5. 3 5 *mx-1,yc+5.75*my+1,R_G);

//вертикальные линии line(xc-7.2*mx,yc-3.5*my,xc-7. 2 *mx,yc+3. 5*my,R_G) ;//1

line(xc-7.2*mx-1,yc-3.5*my-1,xc-7.2*mx-1,yc+3.5*my-1,R_G);

line(xc-7.2*mx+1,yc-3.5*my-1,xc-7.2*mx+1,yc+3.5*my-1,R_G);

line(xc+7.2*mx,yc-3.5*my,xc+7.2*mx,yc+3.5*my,R_G);//2

line(xc+7.2 *mx- 1,yc-3.5*my-1,xc+7.2* mx-1,yc+3.5*my-1,R_G);

line(xc+7.2*mx+1 ,yc -3. 5 *my-1,xc+7.2*mx+1,yc+3.5*my-1,R_G);

DrawArc_1(xc,yc-5.75*my,a1,b1,false,R_G); DrawArc_2(xc,yc+5.75*my,a1,b 1 ,false,R_G); //штриховка for(i=0;i<=11;i++) {line(xc-7.2*mx,yc-3.5*my+9*i,xc-7.2*mx+18*i,yc-3.5*my+9*i,R_G);

line(xc+7.2*mx- 18.5*i,yc+3.5 *my-9*i,xc+7.2*mx,yc+3.5*my-9*i,R_G);} C_P_C=(TColor)cB; XoY(xc,yc);}

Алгоритм Брезенхемз | а || В | ■

A Y

■ИсДтпттп

ЖI TTTTfii.

/ Л Ч

/ \

S

/ / '1 ФМ4 Ь-Ч \ \ Ч X

к \ \ V - /, / / Л

!

\ \ —— — / /

/

■M щш

.шл-т-^р-г

Рисунок 1. Построение заданной фигуры по алгоритму Брезенхема

Литература: шинной графики. /Пер. с англ. С.А.Вичеса, Г.В.Олох-

1. Роджерс Д. Алгоритмические основы ма- тоновой и П.А.Монахова/ под редакцией Ю.М.Баяков-

ского и В.А.Галактионова-М.: Мир, 1989.-512с.: ил.

DETERMINATION OF SHIPS PASSING STRATEGY BY THE USE OF A

CONFLICT FUNCTION

Astrein Vadim Viktorovich Candidate of Technical Sciences, Assoc. Prof. of Navigation department, Admiral Ushakov State Maritime University, Novorossiysk Shtyrkhunova Natalia Aleksandrovna Candidate of Philological Sciences, Assoc. Prof. of Navigation department, Admiral Ushakov Maritime State University, Novorossiysk

ABSTRACT

In the present paper the safety of ships passing is based on the premise that a ships passing is associated with a conflict function. Formalized description of such a conflict is given in terms of the catastrophe theory as a gradual or intermittent change of control parameters of a stable ship's motion enabling to determine the appropriate ships passing strategy.

АННОТАЦИЯ

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

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Key words: safety, conflict, collision between ships

Ключевые слова: безопасность, конфликт, столкновение судов

[email protected]

The model of Collision Prevention System (CPS) is verbally defined on the basis of the appliance of sailing and maneuvering regulations COLREGs -72[1]. For the control of ships passing process it is possible to use two methods: 1) classical, that is a directive method of control; and 2) non-classical, or individualized control being exercised through interactions among a group of ships - active systems (AS) in the homogeneous environment. The first so called classical method shall be used in accordance with all the rules (except item (b), Rule 2, Responsibility). Within this context the main objective is to be achieved by means of control actions being of extremely directive effect simi-

lar to «elementary prohibition». The main principle of decision-making will be rule-oriented method linking fuzzy linguistic variables. A set of the rules define the strategy to control a ship for preventing collisions at sea in ordinary circumstances and characterized as «ordinary practice of seamen». Non-classical control methods cover everything that can ensure a safe sailing of ships in the event of immediate danger of collision between ships in compliance with «good seamanship», i.e. item (b) Rule 2 to be applied.

Because of a conflict arisen from a dangerous approach of ships they have to continuously solve the problems of finding for a new safe condition taking into account both classical and non-classical methods of control and

i Надоели баннеры? Вы всегда можете отключить рекламу.