# Implementación de algoritmos/Geometría/Algoritmo del punto medio para circunferencias

## Circunferencias

### Java

```void CircleMidPoint(Graphics g, int xc, int yc, int r){
int x, y, p;
x = 0;
y = r;
p = 1 - r;
PlotPoint(g,xc,yc,x,y);
/* se cicla hasta trazar todo un octante */
while (x < y){
x = x + 1;
if (p < 0)
p = p + 2*x + 1;
else {
y = y - 1;
p = p + 2*(x - y) + 1;
}
PlotPoint(g,xc,yc,x,y);
}}
```

## Cónicas

### Elipse (En java)

``` public void Elipse(Graphics g, int xc, int yc, int rx, int ry){
int x, y, p, px, py;
int rx2, ry2, tworx2, twory2;
ry2 = ry*ry;
rx2 = rx*rx;
twory2 = 2 * ry2;
tworx2 = 2 * rx2;
/* región 1 */
x = 0;
y = ry;
PlotPoint(x,y);
p = (int)Math.round(ry2 - rx2*ry + 0.25*rx2);
px = 0;
py = tworx2*y;
while (px < py) { /* se cicla hasta trazar la región 1 */
x = x + 1;
px = px + twory2;
if (p < 0)
p = p + ry2 + px;
else {
y = y - 1;
py = py - tworx2;
p = p + ry2 + px - py;
}
PlotPoint(x,y);
}
/* región 2 */
p = (int)Math.round(ry2*(x+0.5)*(x+0.5) + rx2*(y-1)*(y-1) - rx2*ry2);
px = 0;
py = tworx2*y;
while (y > 0) { /* se cicla hasta trazar la región 2 */
y = y - 1;
py = py - tworx2;
if (p > 0)
p = p + rx2 - py;
else {
x = x + 1;
px = px + twory2;
p = p + rx2 + py + px;
}
PlotPoint(x,y);
}
}
```

### Elipse (En C)

``` #include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>
void main()
{
float x,y, rx2, ry2,p1,p2;
int xc, yc, gm, gd=DETECT, rx, ry;
printf("ENTER RX AND RY:");
scanf("%d %d",&rx,&ry);
printf("ENTER THE CO-ORDINATES OF THE CENTER:");
scanf("%d %d",&xc,&yc);
initgraph(&gd,&gm," ");
putpixel(xc, yc,15);
x=0;
y=ry;
rx2=pow(rx,2);
ry2=pow(ry,2);
p1=ry2-(rx2*ry)+(0.25*rx2);
while((ry2*x)<(rx2*y))
{
if(p1<0)
{ x++;
p1=p1+(2*ry2*x)+ry2;
}
else
{
x++; y--;
p1=p1+(2*ry2*x)-(2*rx2*y)+ry2;
}
putpixel(xc+x, yc+y,15);
putpixel(xc-x,yc+y,15);
putpixel(xc+x,yc-y,15);
putpixel(xc-x,yc-y,15);
}
p2=(ry2)*pow((x+0.5),2)+(rx2)*pow((y-1),2)-(rx2*ry2);
while(y>0)
{
if (p2>0)
{
y--;
p2=p2-(2*rx2*y) +rx2;
}
else
{
x++; y--;
p2=p2+ (2*ry2*x)-(2*rx2*y)+rx2;
}
putpixel(xc+x, yc+y,15);
putpixel(xc-x,yc+y,15);
putpixel(xc+x,yc-y,15);
putpixel(xc-x,yc-y,15);
}
getch();
closegraph();
}
```