#include <graphics.h>
#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;
}
ICAgICNpbmNsdWRlIDxncmFwaGljcy5oPgogICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgogICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAjaW5jbHVkZSA8Y29uaW8uaD4KICAgICNpbmNsdWRlIDxtYXRoLmg+CiAgICAjZGVmaW5lIFBpIDMuMTQxNTkyNjUzNgogICAgLy8gdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBncmFwaGljcyBtb2RlCiAgICAvLyBpdCB3aWxsIHdvcmsgb25seSBpZiB5b3UncmUgdXNpbmcgQm9ybGFuZCBDKysgY29tcGlsZXIgJiBCR0kgZHJpdmVycwogICAgLy8gaWYgeW91J3JlIHVzaW5nIGFub3RoZXIgY29tcGlsZXIgeW91IHNob3VsZCBvdmVyd3JpdGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uCiAgICB2b2lkIGluaXRfZ3Iodm9pZCkKICAgIHsKICAgIC8qIHJlcXVlc3QgYXV0b2RldGVjdGlvbiAqLwogICAgaW50IGdkcml2ZXIgPSBERVRFQ1QsIGdtb2RlLCBlcnJvcmNvZGU7CiAgICAvKiBpbml0aWFsaXplIGdyYXBoaWNzIG1vZGUgKi8KICAgIGluaXRncmFwaCgmZ2RyaXZlciwgJmdtb2RlLCAiIik7CiAgICAvKiByZWFkIHJlc3VsdCBvZiBpbml0aWFsaXphdGlvbiAqLwogICAgZXJyb3Jjb2RlID0gZ3JhcGhyZXN1bHQoKTsKICAgIGlmIChlcnJvcmNvZGUgIT0gZ3JPaykgLyogYW4gZXJyb3Igb2NjdXJyZWQgKi8KICAgIHsKICAgIHByaW50ZigiR3JhcGhpY3MgZXJyb3I6ICVzXG4iLCBncmFwaGVycm9ybXNnKGVycm9yY29kZSkpOwogICAgcHJpbnRmKCJQcmVzcyBhbnkga2V5IHRvIGhhbHQ6Iik7CiAgICBnZXRjaCgpOwogICAgZXhpdCgxKTsgLyogcmV0dXJuIHdpdGggZXJyb3IgY29kZSAqLwogICAgfQogICAgfQogICAgLy8gdGhpcyBmdW5jdGlvbiBzaHV0cyBncmFwaGljcyBtb2RlIGRvd24KICAgIC8vIGl0IHdpbGwgd29yayBvbmx5IGlmIHlvdSdyZSB1c2luZyBCb3JsYW5kIEMrKyBjb21waWxlciAmIEJHSSBkcml2ZXJzCiAgICAvLyBpZiB5b3UncmUgdXNpbmcgYW5vdGhlciBjb21waWxlciB5b3Ugc2hvdWxkIG92ZXJ3cml0ZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24KICAgIHZvaWQgZW5kX2dyKHZvaWQpCiAgICB7CiAgICBjbG9zZWdyYXBoKCk7CiAgICB9CiAgICAvLyB0aGlzIGZ1bmN0aW9uIG1vdmVzIENQIHRvICh4LHkpIHBvc2l0aW9uCiAgICAvLyBpdCB3aWxsIHdvcmsgb25seSBpZiB5b3UncmUgdXNpbmcgQm9ybGFuZCBDKysgY29tcGlsZXIgJiBCR0kgZHJpdmVycwogICAgLy8gaWYgeW91J3JlIHVzaW5nIGFub3RoZXIgY29tcGlsZXIgeW91IHNob3VsZCBvdmVyd3JpdGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uCiAgICB2b2lkIE1vdmVUbyhpbnQgeCwgaW50IHkpCiAgICB7CiAgICBtb3ZldG8oeCx5KTsKICAgIH0KICAgIC8vIHRoaXMgZnVuY3Rpb24gZHJhd3MgYSBsaW5lIHRvICh4LHkpIHBvc2l0aW9uCiAgICAvLyBpdCB3aWxsIHdvcmsgb25seSBpZiB5b3UncmUgdXNpbmcgQm9ybGFuZCBDKysgY29tcGlsZXIgJiBCR0kgZHJpdmVycwogICAgLy8gaWYgeW91J3JlIHVzaW5nIGFub3RoZXIgY29tcGlsZXIgeW91IHNob3VsZCBvdmVyd3JpdGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uCiAgICB2b2lkIExpbmVUbyhpbnQgeCwgaW50IHkpCiAgICB7CiAgICBsaW5ldG8oeCx5KTsKICAgIH0KICAgIGNvbnN0IE49NjsgLy8gbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgZmlndXJlCiAgICAvLyBjb29yZGluYXRlcyBvZiBhbGwgZ2l2ZW4gcG9pbnRzCiAgICBlbnVtIGFjdGlvbnMge01PVkUsRFJBV307CiAgICBzdHJ1Y3QKICAgIHsKICAgIGFjdGlvbnMgYWN0aW9uOwogICAgaW50IHg7CiAgICBpbnQgeTsKICAgIH0gZmlndXJlW05dPXt7TU9WRSwzNjAsMjcwfSx7RFJBVywzNjAsMjYwfSx7RFJBVywzNTUsMjYwfSx7RFJBVywzNjAsMjUwfSwKICAgIHtEUkFXLDM2NSwyNjB9LHtEUkFXLDM2MCwyNjB9fTsKICAgIGludCB4MCx5MCxkeCxkeTsKICAgIGZsb2F0IHBoaTsKICAgIGludCBtYWluKHZvaWQpCiAgICB7CiAgICAvLyBpbml0aWFsaXppbmcgZ3JhcGhpY3MgbW9kZQogICAgaW5pdF9ncigpOwogICAgLy8gcm90YXRpbmcgYWJvdXQgKHgwLHkwKQogICAgeDA9MzAwOwogICAgeTA9MjYwOwogICAgLy8gYnkgMTAgZGVncmVlcwogICAgcGhpPTQ1LjAqUGkvMTgwLjA7CiAgICAvLyBtYWluIGxvb3AKICAgIGZvcihpbnQgaT0wO2k8ODtpKyspCiAgICB7CiAgICAvLyByb3RhdGluZyB0aGUgZmlndXJlCiAgICBmb3IgKGludCBqPTA7ajxOO2orKykKICAgIHsKICAgIGR4PWZpZ3VyZVtqXS54LXgwOwogICAgZHk9ZmlndXJlW2pdLnkteTA7CiAgICBmaWd1cmVbal0ueD14MCtkeCpjb3MocGhpKS1keSpzaW4ocGhpKTsKICAgIGZpZ3VyZVtqXS55PXkwK2R4KnNpbihwaGkpK2R5KmNvcyhwaGkpOwogICAgfQogICAgLy8gZHJhd2luZyByb3RhdGVkIGZpZ3VyZQogICAgZm9yIChqPTA7ajxOO2orKykKICAgIGlmIChmaWd1cmVbal0uYWN0aW9uPT1NT1ZFKQogICAgTW92ZVRvKGZpZ3VyZVtqXS54LGZpZ3VyZVtqXS55KTsKICAgIGVsc2UKICAgIExpbmVUbyhmaWd1cmVbal0ueCxmaWd1cmVbal0ueSk7CiAgICB9CiAgICAvLyBjbGVhbiB1cAogICAgZ2V0Y2goKTsKICAgIGVuZF9ncigpOwogICAgcmV0dXJuIDA7CiAgICB9