Научная статья на тему 'Использование метода срединной точки для построения сопряжённой гиперболы и вертикального эллипса'

Использование метода срединной точки для построения сопряжённой гиперболы и вертикального эллипса Текст научной статьи по специальности «Математика»

CC BY
46
11
i Надоели баннеры? Вы всегда можете отключить рекламу.
Область наук
Ключевые слова
срединная точка / вертикальный эллипс / сопряжённая гипербола / average points / vertical-strip oriented ellipse / conjugate giperbola

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

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

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

USE OF METHOD AVERAGE POINTS FOR KNOWLEDGE CONJUGATE GIPERBOLA AND VERTICAL-STRIP ORIENTED ELLIPSE

In this article considers knowledge of vertical-strip oriented ellipse and conjugate giperbola by methods average points. The fill of vertical -strip oriented ellipse and conjugate giperbola realize lines, constructing on the methods average points. The algorithm bit-mapped scan ellipse describe in [1]. For removal jagging by construction linear function(line), a also canonical bifurcation( circle, ellipse, parabola, giperbola) apart from algorithm Brezenshema one can use methods average points.

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

28

Евразийский Союз Ученых (ЕСУ) # 11 (20), 2015 ТЕХНИЧЕСКИЕ НАУКИ

ТЕХНИЧЕСКИЕ НАУКИ

использование метода срединной точки для построения

СОПРЯЖ ННОЙ ГИПЕРБОЛЫ И ВЕРТИКАЛЬНОГО ЭЛЛИПСА

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

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

г. Москва

use of method average points for knowledge conjugate giperbola and vertical-strip oriented ellipse

Ananieva Marina Alekseevna

older teacher of chair application mathematics of Moskow State University information technology, radio-technology and electronics MIREA, MOSCOW

АННОТАЦИЯ

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

ABSTRACT

In this article considers knowledge of vertical-strip oriented ellipse and conjugate giperbola by methods average points. The fill of vertical -strip oriented ellipse and conjugate giperbola realize lines, constructing on the methods average points. The algorithm bit-mapped scan ellipse describe in [1]. For removal jagging by construction linear function(line), a also canonical bifurca-tion(circle, ellipse, parabola, giperbola) apart from algorithm Brezenshema one can use methods average points.

Ключевые слова: срединная точка, вертикальный эллипс, сопряжённая гипербола Keyword: average points, vertical-strip oriented ellipse, conjugate giperbola

//программа написана на языке программирования C++Builder6 #include <vcl.h>

#pragma hdrstop #include<math.h>

#define C_P Canvas->Pixels #define C_P_C Canvas->Pen->Color #define C_M Canvas->MoveTo #define C_L Canvas->LineTo #define C_T Canvas->TextOutA #define C_P_W Canvas->Pen->Width #define R_B RGB(200,200,200)

#define cW clWhite #define R_G RGB(244,98,0)

#include "Article_8.h"

//------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int mx=30,my=30;

//------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ }

//------------------------------------------

void__fastcall TForm1::ShowGrid(int cenx)

{int x,y;

C_P_C=(TColor)R_B;

//горизонтальные линии сетки for(y=0;y<=18*my;y+=my)

{ C_M(cenx-11*mx,y);

C_L(cenx+11*mx,y); }

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

29

Евразийский Союз Ученых (ЕСУ) # 11 (20), 2015 ТЕХНИЧЕСКИЕ НАУКИ

for(x=cenx-11*mx;x<=cenx+11*mx;x+=mx)

{ C_M(x,0);

C_L(x,18*my); }

}

//.......................................

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

{//оси //ось X C_P_W=2;

C_M(cenx-10*mx,ceny);

C_L(cenx+10*mx,ceny);

//стрелка

C_M(cenx+9.5*mx,ceny-0.25*my);

C_L(cenx+10*mx,ceny);

C_L(cenx+9.5*mx,ceny+0.25*my);

C_T(cenx+9.5*mx,ceny-1*my,"X");

//ось Y

C_M(cenx,ceny-8*my);

C_L(cenx,ceny+8*my);

//стрелка

C_M(cenx-0.25*mx,ceny-7.5*my);

C_L(cenx,ceny-8*my);

C_L(cenx+0.25*mx,ceny-7.5*my);

C_T(cenx+0.5*mx,ceny-8.1*my,"Y");

C_P_W=1;

}

//---------------------------------------

void___fastcall TForm1::Ell_b(int cenx, int ceny, int a, int b,int

cd_x)

{int x,y,a2,b2,a2a,b2b; float d,st; a2=a*a;b2=b*b; a2a=2*a2;b2b=2*b2;

//часть 7

d=a2+b2*(-a+0.25);

x=0;y=a;

while(b2*(y-0.5)>a2*x)

{if (d<0)

{d+=a2*(2*x+3);x++;}

else

{d+=a2*(2*x+3)+b2b*(1-y);x++;y--;}

C_P_C=(TColor)R_G;

{

DrawPoints(cenx,ceny,x,y,cd_x);

//закрашивание левого эллипса

line(cenx-x-cd_x,ceny-y,cenx+x-cd_x,ceny-y,R_G);

line(cenx-x-cd_x,ceny+y,cenx+x-cd_x,ceny+y,R_G);

//закрашивание правого эллипса

line(cenx-x+cd_x,ceny-y,cenx+x+cd_x,ceny-y,R_G);

line(cenx-x+cd_x,ceny+y,cenx+x+cd_x,ceny+y,R_G);

}

}

//часть 8

d=b2+a2*(-b+0.25);

x=b;y=0;

st=sqrt(a2+b2);

while((b2*(y-0.5)<=a2*x) && (x>=b2/st) && (y<=a2/st))

{if (d<0)

{d+=b2*(2*y+3);y++;}

else

{d+=a2a*(1-x)+b2*(3+2*y);y++;x--;};

DrawPoints(cenx,ceny,x,y,cd_x);

C_P_C=(TColor)R_G;

//закрашивание левого эллипса

line(cenx-x-cd_x,ceny-y,cenx+x-cd_x,ceny-y,R_G);

line(cenx-x-cd_x,ceny+y,cenx+x-cd_x,ceny+y,R_G);

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

//закрашивание правого эллипса

line(cenx-x+cd_x,ceny-y,cenx+x+cd_x,ceny-y,R_G);

line(cenx-x+cd_x,ceny+y,cenx+x+cd_x,ceny+y,R_G);

}

}

//-------------------------------------------------------

void___fastcall TForm1::DrawPoints(int cenx, int ceny, int x, int

y,int cd_x)

{//левый эллипс

C_P[cenx+x-cd_x][ceny+y]=(TColor)R_G;

C_P[cenx+x-cd_x][ceny-y]=(TColor)R_G;

C_P[cenx-x-cd_x][ceny+y]=(TColor)R_G;

C_P[cenx-x-cd_x][ceny-y]=(TColor)R_G;

//правый эллипс

C_P[cenx+x+cd_x][ceny+y]=(TColor)R_G;

C_P[cenx+x+cd_x][ceny-y]=(TColor)R_G;

C_P[cenx-x+cd_x][ceny+y]=(TColor)R_G;

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

//-------------------------------------------------------

void___fastcall TForm1::line(int x1, int y1, int x2, int y2, int

color)

{float k,x,y,c=0;

if (x1==x2) k=(y2-y1)*(y2-y1);else k=(float)(y2-y1)/(x2-x1);

C_P[x1][y1]=(TColor)color; if (fabs(x2-x1)>fabs(y2-y1))

{ y=y1; if (k>=0)

{ for(int x=x1+1;x<=x2;x++)

{ if ((c+=k)>0.5)

{ c-=1;

y++; }

C_P[x][(int)y]=(TColor)color; }

}

else

{ y=y1;

for(int x=x1-1;x>=x2;x--)

{

if ((c-=k)>0.5)

{

c-=1;

y++;

}

C_P[x][(int)y]=(TColor)color;

}

}

}

else

{

x=x1;

if ((1./k)>=0)

{

for(int y=y1+1;y<=y2;y++)

{

if ((c+=1./k)>0.5)

{

c-=1;

30

Евразийский Союз Ученых (ЕСУ) # 11 (20), 2015 ТЕХНИЧЕСКИЕ НАУКИ

x++;

}

C_P[(int)x][y]=(TColor)color;

}

}

else

{

x=x1;

for(int y=y1+1;y<=y2;y++)

{

if ((c-=1./k)>0.5)

{

c-=1;

x--;

}

C_P[(int)x][y]=(TColor)color;

}

}

}

}

//----------------------------------------------------------

void___fastcall TForm1::DrawGip(int cenx, int ceny, int a, int b,

int endg_xx, int endg_yy)

{float a2,b2,a2a,d,st,r2_1,eks_1;

int x,y;

a2=a*a;b2=b*b;

a2a=2*a2;

d=b2+a2*(b+0.25);

x=0;y=b;

st=sqrt(a2+b2);

eks_1=(float)st/(float)b;

while (r2_1<=abs(eks_1*y-b) && x<=endg_xx && y<=endg_ yy)

{ if (d<0)

{ d+=b2*(2*x+3);

x++; }

else

{ d+=b2*(2*x+3)+a2a*(1-y);

x++; y++; }

DrawDot(cenx,ceny,x,y);

}

}

//----------------------------------------------------

void___fastcall TForm1::DrawDot(int cenx, int ceny, int x, int y)

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

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

C_P[cenx+x][ceny-y]=(TColor)R_G;

C_P[cenx-x][ceny+y]=(TColor)R_G;

C_P[cenx-x][ceny-y]=(TColor)R_G;

line(cenx-x,ceny-y,cenx+x,ceny-y,R_G);

line(cenx-x,ceny+y,cenx+x,ceny+y,R_G);

}

//-----------------------------------------------------

void___fastcall TForm1::FormPaint(TObject *Sender)

{

int xc=11*mx,yc=9*my,a1=5*mx,b1=1*my,cd_x=8*mx; int a2=6*mx,b2=3*my,endg_xx=8*mx,endg_yy=5*my; Color=(TColor)cW;

ShowGrid(xc);

C_P_C=(TColor)0;

DrawGip(xc,yc,a2,b2,endg_xx,endg_yy);

Ell_b(xc,yc,a1,b1,cd_x);

Ell_b(xc,yc,a1,b1,cd_x);

C_P_C=(TColor)0;

line(xc-8*mx,yc-5.5*my,xc-8*mx,yc+5.5*my,0); line(xc+8*mx,yc-5.5*my,xc+8*mx,yc+5.5*my,0); //вертикальный эллипс C_T(xc-6*mx,yc-2*my,"xA2+yA2/25=1"); C_M(xc-7.1*mx,yc-2.5*my);

C_L(xc-6*mx,yc-1.1*my);

C_L(xc-1.8*mx,yc-1.1*my);

//сопряжённая гипербола

C_T(xc-6*mx,yc+2*my,"yA2/9-xA2/36=1");

C_M(xc-6*mx,yc+2.85*my);

C_L(xc-1.3*mx,yc+2.85*my);

C_M(xc-6*mx,yc+2.85*my);

C_L(xc-7*mx,yc+4.7*my);

XoY(xc,yc);

}

//------------------------------------------------------

Рисунок 1. Гипербола и вертикальный эллипс Список литературы:

Шикин Е.В., Боресков А.В. Компьютерная графика. Полигональные модели. - М.: ДИАЛОГ-МИФИ, 2005.-464с.: ил.

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