#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define Pi 3.1415926536
// this function initializes graphics mode
// it will work only if you're using Borland C++ compiler & BGI drivers
// if you're using another compiler you should overwrite body of this function
void init_gr(void)
{
/* request autodetection */
int gdriver = DETECT, gmode, errorcode;
/* initialize graphics mode */
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg
(errorcode
)); printf("Press any key to halt:"); exit(1); /* return with error code */ }
}
// this function shuts graphics mode down
// it will work only if you're using Borland C++ compiler & BGI drivers
// if you're using another compiler you should overwrite body of this function
void end_gr(void)
{
closegraph();
}
// this function moves CP to (x,y) position
// it will work only if you're using Borland C++ compiler & BGI drivers
// if you're using another compiler you should overwrite body of this function
void MoveTo(int x, int y)
{
moveto(x,y);
}
// this function draws a line to (x,y) position
// it will work only if you're using Borland C++ compiler & BGI drivers
// if you're using another compiler you should overwrite body of this function
void LineTo(int x, int y)
{
lineto(x,y);
}
const N=6; // number of points in the figure
// coordinates of all given points
enum actions {MOVE,DRAW};
struct
{
actions action;
int x;
int y;
} figure[N]={{MOVE,360,270},{DRAW,360,260},{DRAW,355,260},{DRAW,360,250},
{DRAW,365,260},{DRAW,360,260}};
int x0,y0,dx,dy;
float phi;
int main(void)
{
// initializing graphics mode
init_gr();
// rotating about (x0,y0)
x0=300;
y0=260;
// by 10 degrees
phi=45.0*Pi/180.0;
// main loop
for(int i=0;i<8;i++)
{
// rotating the figure
for (int j=0;j<N;j++)
{
dx=figure[j].x-x0;
dy=figure[j].y-y0;
figure
[j
].
x=x0
+dx
*cos(phi
)-dy
*sin(phi
); figure
[j
].
y=y0
+dx
*sin(phi
)+dy
*cos(phi
); }
// drawing rotated figure
for (j=0;j<N;j++)
if (figure[j].action==MOVE)
MoveTo(figure[j].x,figure[j].y);
else
LineTo(figure[j].x,figure[j].y);
}
// clean up
end_gr();
return 0;
}
CiAgICAjaW5jbHVkZSA8c3RkbGliLmg+CiAgICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgICNpbmNsdWRlIDxjb25pby5oPgogICAgI2luY2x1ZGUgPG1hdGguaD4KICAgICNkZWZpbmUgUGkgMy4xNDE1OTI2NTM2CiAgICAvLyB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGdyYXBoaWNzIG1vZGUKICAgIC8vIGl0IHdpbGwgd29yayBvbmx5IGlmIHlvdSdyZSB1c2luZyBCb3JsYW5kIEMrKyBjb21waWxlciAmIEJHSSBkcml2ZXJzCiAgICAvLyBpZiB5b3UncmUgdXNpbmcgYW5vdGhlciBjb21waWxlciB5b3Ugc2hvdWxkIG92ZXJ3cml0ZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24KICAgIHZvaWQgaW5pdF9ncih2b2lkKQogICAgewogICAgLyogcmVxdWVzdCBhdXRvZGV0ZWN0aW9uICovCiAgICBpbnQgZ2RyaXZlciA9IERFVEVDVCwgZ21vZGUsIGVycm9yY29kZTsKICAgIC8qIGluaXRpYWxpemUgZ3JhcGhpY3MgbW9kZSAqLwogICAgaW5pdGdyYXBoKCZnZHJpdmVyLCAmZ21vZGUsICIiKTsKICAgIC8qIHJlYWQgcmVzdWx0IG9mIGluaXRpYWxpemF0aW9uICovCiAgICBlcnJvcmNvZGUgPSBncmFwaHJlc3VsdCgpOwogICAgaWYgKGVycm9yY29kZSAhPSBnck9rKSAvKiBhbiBlcnJvciBvY2N1cnJlZCAqLwogICAgewogICAgcHJpbnRmKCJHcmFwaGljcyBlcnJvcjogJXNcbiIsIGdyYXBoZXJyb3Jtc2coZXJyb3Jjb2RlKSk7CiAgICBwcmludGYoIlByZXNzIGFueSBrZXkgdG8gaGFsdDoiKTsKICAgIGdldGNoKCk7CiAgICBleGl0KDEpOyAvKiByZXR1cm4gd2l0aCBlcnJvciBjb2RlICovCiAgICB9CiAgICB9CiAgICAvLyB0aGlzIGZ1bmN0aW9uIHNodXRzIGdyYXBoaWNzIG1vZGUgZG93bgogICAgLy8gaXQgd2lsbCB3b3JrIG9ubHkgaWYgeW91J3JlIHVzaW5nIEJvcmxhbmQgQysrIGNvbXBpbGVyICYgQkdJIGRyaXZlcnMKICAgIC8vIGlmIHlvdSdyZSB1c2luZyBhbm90aGVyIGNvbXBpbGVyIHlvdSBzaG91bGQgb3ZlcndyaXRlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbgogICAgdm9pZCBlbmRfZ3Iodm9pZCkKICAgIHsKICAgIGNsb3NlZ3JhcGgoKTsKICAgIH0KICAgIC8vIHRoaXMgZnVuY3Rpb24gbW92ZXMgQ1AgdG8gKHgseSkgcG9zaXRpb24KICAgIC8vIGl0IHdpbGwgd29yayBvbmx5IGlmIHlvdSdyZSB1c2luZyBCb3JsYW5kIEMrKyBjb21waWxlciAmIEJHSSBkcml2ZXJzCiAgICAvLyBpZiB5b3UncmUgdXNpbmcgYW5vdGhlciBjb21waWxlciB5b3Ugc2hvdWxkIG92ZXJ3cml0ZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24KICAgIHZvaWQgTW92ZVRvKGludCB4LCBpbnQgeSkKICAgIHsKICAgIG1vdmV0byh4LHkpOwogICAgfQogICAgLy8gdGhpcyBmdW5jdGlvbiBkcmF3cyBhIGxpbmUgdG8gKHgseSkgcG9zaXRpb24KICAgIC8vIGl0IHdpbGwgd29yayBvbmx5IGlmIHlvdSdyZSB1c2luZyBCb3JsYW5kIEMrKyBjb21waWxlciAmIEJHSSBkcml2ZXJzCiAgICAvLyBpZiB5b3UncmUgdXNpbmcgYW5vdGhlciBjb21waWxlciB5b3Ugc2hvdWxkIG92ZXJ3cml0ZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24KICAgIHZvaWQgTGluZVRvKGludCB4LCBpbnQgeSkKICAgIHsKICAgIGxpbmV0byh4LHkpOwogICAgfQogICAgY29uc3QgTj02OyAvLyBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBmaWd1cmUKICAgIC8vIGNvb3JkaW5hdGVzIG9mIGFsbCBnaXZlbiBwb2ludHMKICAgIGVudW0gYWN0aW9ucyB7TU9WRSxEUkFXfTsKICAgIHN0cnVjdAogICAgewogICAgYWN0aW9ucyBhY3Rpb247CiAgICBpbnQgeDsKICAgIGludCB5OwogICAgfSBmaWd1cmVbTl09e3tNT1ZFLDM2MCwyNzB9LHtEUkFXLDM2MCwyNjB9LHtEUkFXLDM1NSwyNjB9LHtEUkFXLDM2MCwyNTB9LAogICAge0RSQVcsMzY1LDI2MH0se0RSQVcsMzYwLDI2MH19OwogICAgaW50IHgwLHkwLGR4LGR5OwogICAgZmxvYXQgcGhpOwogICAgaW50IG1haW4odm9pZCkKICAgIHsKICAgIC8vIGluaXRpYWxpemluZyBncmFwaGljcyBtb2RlCiAgICBpbml0X2dyKCk7CiAgICAvLyByb3RhdGluZyBhYm91dCAoeDAseTApCiAgICB4MD0zMDA7CiAgICB5MD0yNjA7CiAgICAvLyBieSAxMCBkZWdyZWVzCiAgICBwaGk9NDUuMCpQaS8xODAuMDsKICAgIC8vIG1haW4gbG9vcAogICAgZm9yKGludCBpPTA7aTw4O2krKykKICAgIHsKICAgIC8vIHJvdGF0aW5nIHRoZSBmaWd1cmUKICAgIGZvciAoaW50IGo9MDtqPE47aisrKQogICAgewogICAgZHg9ZmlndXJlW2pdLngteDA7CiAgICBkeT1maWd1cmVbal0ueS15MDsKICAgIGZpZ3VyZVtqXS54PXgwK2R4KmNvcyhwaGkpLWR5KnNpbihwaGkpOwogICAgZmlndXJlW2pdLnk9eTArZHgqc2luKHBoaSkrZHkqY29zKHBoaSk7CiAgICB9CiAgICAvLyBkcmF3aW5nIHJvdGF0ZWQgZmlndXJlCiAgICBmb3IgKGo9MDtqPE47aisrKQogICAgaWYgKGZpZ3VyZVtqXS5hY3Rpb249PU1PVkUpCiAgICBNb3ZlVG8oZmlndXJlW2pdLngsZmlndXJlW2pdLnkpOwogICAgZWxzZQogICAgTGluZVRvKGZpZ3VyZVtqXS54LGZpZ3VyZVtqXS55KTsKICAgIH0KICAgIC8vIGNsZWFuIHVwCiAgICBnZXRjaCgpOwogICAgZW5kX2dyKCk7CiAgICByZXR1cm4gMDsKICAgIH0=