Napisałem javową implementację algorytmu Bresenhama. Jednak nie działa on do końca sprawnie ,bo na krańcach elipsa nie jest okragła tylko prosta ! Wie ktoś jak to rozwiązać ?
public void piksel (Graphics g,int x,int y,int c)
{
if (c==0) g.setColor( Color.black );
else g.setColor ( Color.blue );
g.drawLine(x,y,x+1,y);
}
public void elipsa (Graphics g,int xs,int ys,int rx,int ry)
{
// na podstawie algorytmu kreslenia elipsy Bresenhama
int x,y; //współrzędne punktów na obwodzie elipsy o środku w początku układu współrzędnych
int e,e1,e2; ////wyrażenie błędu dla narysowanego punktu P
int rx2 = rx * rx;
int ry2 = ry * ry;
int kolor=0;
// zaczynamy
x=0;y=ry;
e=0;
int fx=0;
int fy=rx;
while (ry2*x<=rx2*y) //pierwsza petla
{
//zmienimy kolory
if (kolor==0) kolor=1;
else kolor=0;
piksel(g,x+xs,y+ys,kolor); //prawy dolny
piksel(g,x+xs,ys-y,kolor); //prawy gorny
piksel(g,xs-x,y+ys,kolor); //lewy dolny
piksel(g,xs-x,ys-y,kolor);//lewy gorny
e1=e+2*ry2*x+ry2;
e2=e1-2*rx2*y+rx2;
x++;
if ((e1+e2)<0) e=e1;
else
{
e=e2;
y--;
} // koniec petli
while(y>=0)//poczatek petli
{
if (kolor==0) kolor=1;
else kolor=0;
piksel(g,x+xs,y+ys,kolor); //prawy dolny
piksel(g,x+xs,ys-y,kolor); //prawy gorny
piksel(g,xs-x,y+ys,kolor); //lewy dolny
piksel(g,xs-x,ys-y,kolor);//lewy gorny
e1=e-2*rx2*y+rx2;
e2=e1+2*ry2*x+ry2;
y--;
if((e1+e2)>=0) e=e1;
else
{
e=e2;
x++;
}
}//koniec petli
}