Дещо розібравшись та взнавши що й до чого, намалюю еліпс.
Нічого важкого в цьому не має бути адже код легкий.
#include <graphics.h>
#include <math.h>
#include <iostream.h>
void ci (int x, int y, int rx, int ry,int color)
{
int x1, y1;
float dn, n = 0;
dn = 1.00 / float(rx);
while (n < 2*M_PI)
{
x1 = x + rx*cos(n);
y1 = y + ry*sin(n);
putpixel (x1,y1,color);
n = n + dn;
}
};
int main()
{
int gdriver = DETECT, gmode, eror;
initgraph (&gdriver,&gmode,"");
eror = graphresult();
if (eror != grOk)
{
cout<<"EROR!!!!\n Number eror = "<<eror;
getch();
return 0;
}
ci (220,250,200,90,14);
getch ();
return 0;
}
Більш серйозним методом є алгоритм Берзенхема, який я використав...
Теорію ви можете знайти з вище поданого посилання.
#include <graphics.h>
#include <iostream.h>
float x,y;
int xc,yc;
int rx,ry;
int color;
void disp ();
void el ()
{
float p1, p2;
x=0;
y=ry;
disp();
p1=(ry*ry)-(rx*rx*ry)+(rx*rx)/4;
while((2.0*ry*ry*x)<=(2.0*rx*rx*y))
{
x++;
if(p1<=0)
p1=p1+(2.0*ry*ry*x)+(ry*ry);
else
{
y--;
p1=p1+(2.0*ry*ry*x)-(2.0*rx*rx*y)+(ry*ry);
}
disp();
x=-x;
disp();
x=-x;
}
//відповідає за малювання країв
x=rx;
y=0;
disp();
p2=(rx*rx)+2.0*(ry*ry*rx)+(ry*ry)/4;
while((2.0*ry*ry*x)>(2.0*rx*rx*y))
{
y++;
if(p2>0)
p2=p2+(rx*rx)-(2.0*rx*rx*y);
else
{
x--;
p2=p2+(2.0*ry*ry*x)-(2.0*rx*rx*y)+(rx*rx);
}
disp();
y=-y;
disp();
y=-y;
}
}
void disp()
{
putpixel(xc+x,yc+y,color);
putpixel(xc-x,yc+y,color);
putpixel(xc+x,yc-y,color);
putpixel(xc-x,yc-y,color);
}
int main()
{
int gdriver = DETECT, gmode, eror;
initgraph (&gdriver,&gmode,"");
eror = graphresult();
if (eror != grOk)
{
cout<<"EROR !!! = "<< eror<<endl;
getch();
return 0;
}
xc = 200;
yc = 200;
rx = 80;
ry = 30;
color = 15;
el();
getch();
return 0;
}
Немає коментарів:
Дописати коментар