#include<graphics.h>
#include<stdio.h>
#include<math.h>
//Function to plot the ellipse
void pixel ( int xc, int yc, int x, int y)
{
putpixel( 320 + ( xc+ x) , 240 - ( yc+ y) , 14 ) ;
putpixel( 320 + ( xc+ x) , 240 - ( yc- y) , 14 ) ;
putpixel( 320 + ( xc- x) , 240 - ( yc- y) , 14 ) ;
putpixel( 320 + ( xc- x) , 240 - ( yc+ y) , 14 ) ;
}
int main( )
{
int xc, yc, x, y, p, rx, ry;
int gdriver= DETECT, gmode; //Detects the graphics drivers automatically
initgraph( & gdriver, & gmode, "" ) ; //Initialize to graphics mode
printf ( "Enter the co-ordinates of the center of the ellipse : " ) ; printf ( "Enter the value of rx and ry of the ellipse : " ) ;
//Take start position as(0,ry)
x= 0 ;
y= ry;
p= ( ry* ry) - ( rx* rx* ry) + ( ( rx* rx) / 4 ) ; //Finding decision parameter p in region 1
//To plot the quadrants
line( 0 , 240 , 639 , 240 ) ;
line( 320 , 0 , 320 , 479 ) ;
outtextxy( 295 , 243 , "0,0" ) ;
setcolor( WHITE) ;
pixel ( xc, yc, x, y) ;
while ( ( 2 * x* ry* ry) < ( 2 * y* rx* rx) ) //At each x position in region 1
{
if ( p< 0 ) //If decision parameter is less than 0
{
x++; //Increment x
p= p+ ( 2 * ry* ry* x) + ( ry* ry) ; //Calculate the new decision parameter
}
else //If decision parameter is greater than 0
{
x++; //Increment x
y--; //Decrement y
p= p+ ( 2 * ry* ry* x) + ( ry* ry) - ( 2 * rx* rx* y) ; //Calculate the new decision parameter
}
pixel ( xc, yc, x, y) ;
}
p
= ry
* ry
* pow ( ( float ) x
+ 0.5 , 2 ) + rx
* rx
* pow ( y
- 1 , 2 ) - rx
* rx
* ry
* ry
; //Finding decision parameter p in region 2 pixel ( xc, yc, x, y) ;
while ( y>= 0 ) //At each y position in region 2
{
if ( p> 0 ) //If decision parameter is greater than 0
{
y--; //Decrement y
p= p- ( 2 * y* rx* rx) + ( rx* rx) ; //Calculate the new decision parameter
}
else //If decision parameter is less than 0
{
y--; //Decrement y
x++; //Increment x
p= p+ ( 2 * ry* ry* x) - ( 2 * y* rx* rx) + ( rx+ rx) ; //Calculate the new decision parameter
}
pixel ( xc, yc, x, y) ;
}
getch ( ) ; //Pauses the Output Console until a key is pressed closegraph( ) ; //Closes the graphics mode
return 0 ;
}
I2luY2x1ZGU8Z3JhcGhpY3MuaD4KI2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWF0aC5oPgoKLy9GdW5jdGlvbiB0byBwbG90IHRoZSBlbGxpcHNlCnZvaWQgcGl4ZWwgKGludCB4YywgaW50IHljLCBpbnQgeCxpbnQgeSkKewogcHV0cGl4ZWwoMzIwKyh4Yyt4KSwyNDAtKHljK3kpLDE0KTsKIHB1dHBpeGVsKDMyMCsoeGMreCksMjQwLSh5Yy15KSwxNCk7CiBwdXRwaXhlbCgzMjArKHhjLXgpLDI0MC0oeWMteSksMTQpOwogcHV0cGl4ZWwoMzIwKyh4Yy14KSwyNDAtKHljK3kpLDE0KTsKfQoKaW50IG1haW4oKQp7CiBpbnQgeGMsIHljLCB4LCB5LCBwLCByeCwgcnk7CgogaW50IGdkcml2ZXI9REVURUNULCBnbW9kZTsgLy9EZXRlY3RzIHRoZSBncmFwaGljcyBkcml2ZXJzIGF1dG9tYXRpY2FsbHkKIGluaXRncmFwaCgmZ2RyaXZlciwgJmdtb2RlLCIiKTsgLy9Jbml0aWFsaXplIHRvIGdyYXBoaWNzIG1vZGUKCiBwcmludGYoIkVudGVyIHRoZSBjby1vcmRpbmF0ZXMgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZSA6ICIpOwogc2NhbmYoIiVkICVkIiwmeGMsJnljKTsKIHByaW50ZigiRW50ZXIgdGhlIHZhbHVlIG9mIHJ4IGFuZCByeSBvZiB0aGUgZWxsaXBzZSA6ICIpOwogc2NhbmYoIiVkICVkIiwmcngsJnJ5KTsKCiAgICAvL1Rha2Ugc3RhcnQgcG9zaXRpb24gYXMoMCxyeSkKICAgIHg9MDsKIHk9cnk7CgogcD0ocnkqcnkpLShyeCpyeCpyeSkrKChyeCpyeCkvNCk7IC8vRmluZGluZyBkZWNpc2lvbiBwYXJhbWV0ZXIgcCBpbiByZWdpb24gMQoKICAgIC8vVG8gcGxvdCB0aGUgcXVhZHJhbnRzCiAgICBsaW5lKDAsMjQwLDYzOSwyNDApOwogICAgbGluZSgzMjAsMCwzMjAsNDc5KTsKICAgIG91dHRleHR4eSgyOTUsMjQzLCIwLDAiKTsKICAgIHNldGNvbG9yKFdISVRFKTsKCiBwaXhlbCAoeGMsIHljLCB4LCB5KTsKCiB3aGlsZSgoMip4KnJ5KnJ5KTwoMip5KnJ4KnJ4KSkgLy9BdCBlYWNoIHggcG9zaXRpb24gaW4gcmVnaW9uIDEKIHsKICBpZihwPDApIC8vSWYgZGVjaXNpb24gcGFyYW1ldGVyIGlzIGxlc3MgdGhhbiAwCiAgewogICB4Kys7IC8vSW5jcmVtZW50IHgKICAgcD1wKygyKnJ5KnJ5KngpKyhyeSpyeSk7IC8vQ2FsY3VsYXRlIHRoZSBuZXcgZGVjaXNpb24gcGFyYW1ldGVyCiAgfQogIGVsc2UgLy9JZiBkZWNpc2lvbiBwYXJhbWV0ZXIgaXMgZ3JlYXRlciB0aGFuIDAKICAgICAgICB7CiAgICAgICAgICAgIHgrKzsgLy9JbmNyZW1lbnQgeAogICAgICAgICAgICB5LS07IC8vRGVjcmVtZW50IHkKICAgICAgICAgICAgcD1wKygyKnJ5KnJ5KngpKyhyeSpyeSktKDIqcngqcngqeSk7IC8vQ2FsY3VsYXRlIHRoZSBuZXcgZGVjaXNpb24gcGFyYW1ldGVyCiAgICAgICAgfQogICAgICAgIHBpeGVsICh4YywgeWMsIHgsIHkpOwogfQoKICAgIHA9cnkqcnkqcG93KChmbG9hdCl4KzAuNSwyKSArIHJ4KnJ4KnBvdyh5LTEsMiktcngqcngqcnkqcnk7IC8vRmluZGluZyBkZWNpc2lvbiBwYXJhbWV0ZXIgcCBpbiByZWdpb24gMgogICAgcGl4ZWwgKHhjLCB5YywgeCwgeSk7CgogICAgd2hpbGUoeT49MCkgLy9BdCBlYWNoIHkgcG9zaXRpb24gaW4gcmVnaW9uIDIKICAgIHsKICBpZihwPjApIC8vSWYgZGVjaXNpb24gcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiAwCiAgICAgICAgewogICAgICAgICAgICB5LS07IC8vRGVjcmVtZW50IHkKICAgICAgICAgICAgcD1wLSgyKnkqcngqcngpKyhyeCpyeCk7IC8vQ2FsY3VsYXRlIHRoZSBuZXcgZGVjaXNpb24gcGFyYW1ldGVyCiAgICAgICAgfQogICAgICAgIGVsc2UgLy9JZiBkZWNpc2lvbiBwYXJhbWV0ZXIgaXMgbGVzcyB0aGFuIDAKICAgICAgICB7CiAgICAgICAgICAgIHktLTsgLy9EZWNyZW1lbnQgeQogICAgICAgICAgICB4Kys7IC8vSW5jcmVtZW50IHgKICAgICAgICAgICAgcD1wKygyKnJ5KnJ5KngpLSgyKnkqcngqcngpKyhyeCtyeCk7IC8vQ2FsY3VsYXRlIHRoZSBuZXcgZGVjaXNpb24gcGFyYW1ldGVyCiAgICAgICAgfQogICAgICAgIHBpeGVsICh4YywgeWMsIHgsIHkpOwogICAgfQoKICAgIGdldGNoKCk7IC8vUGF1c2VzIHRoZSBPdXRwdXQgQ29uc29sZSB1bnRpbCBhIGtleSBpcyBwcmVzc2VkCiAgICBjbG9zZWdyYXBoKCk7IC8vQ2xvc2VzIHRoZSBncmFwaGljcyBtb2RlCiAgICByZXR1cm4gMDsKfQo=