#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 gd = DETECT, gm;
// initgraph initializes the graphics system
// by loading a graphics driver from disk
initgraph(&gd, &gm, "");
// line for x1, y1, x2, y2
line(150, 150, 450, 150);
// line for x1, y1, x2, y2
line(150, 200, 450, 200);
// line for x1, y1, x2, y2
line(150, 250, 450, 250);
// closegraph function closes the graphics
// mode and deallocates all memory allocated
// by graphics system .
closegraph();
}
}
// 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+CiAgICAjZGVmaW5lIFBpIDMuMTQxNTkyNjUzNgogICAgLy8gdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBncmFwaGljcyBtb2RlCiAgICAvLyBpdCB3aWxsIHdvcmsgb25seSBpZiB5b3UncmUgdXNpbmcgQm9ybGFuZCBDKysgY29tcGlsZXIgJiBCR0kgZHJpdmVycwogICAgLy8gaWYgeW91J3JlIHVzaW5nIGFub3RoZXIgY29tcGlsZXIgeW91IHNob3VsZCBvdmVyd3JpdGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uCiAgICB2b2lkIGluaXRfZ3Iodm9pZCkKICAgIHsKICAgIC8qIHJlcXVlc3QgYXV0b2RldGVjdGlvbiAqLwogICAgaW50IGdkID0gREVURUNULCBnbTsgCiAgCiAgICAvLyBpbml0Z3JhcGggaW5pdGlhbGl6ZXMgdGhlIGdyYXBoaWNzIHN5c3RlbSAKICAgIC8vIGJ5IGxvYWRpbmcgYSBncmFwaGljcyBkcml2ZXIgZnJvbSBkaXNrIAogICAgaW5pdGdyYXBoKCZnZCwgJmdtLCAiIik7IAogIAogICAgLy8gbGluZSBmb3IgeDEsIHkxLCB4MiwgeTIgCiAgICBsaW5lKDE1MCwgMTUwLCA0NTAsIDE1MCk7IAogIAogICAgLy8gbGluZSBmb3IgeDEsIHkxLCB4MiwgeTIgCiAgICBsaW5lKDE1MCwgMjAwLCA0NTAsIDIwMCk7IAogIAogICAgLy8gbGluZSBmb3IgeDEsIHkxLCB4MiwgeTIgCiAgICBsaW5lKDE1MCwgMjUwLCA0NTAsIDI1MCk7IAogIAogICAgZ2V0Y2goKTsgCiAgCiAgICAvLyBjbG9zZWdyYXBoIGZ1bmN0aW9uIGNsb3NlcyB0aGUgZ3JhcGhpY3MgCiAgICAvLyBtb2RlIGFuZCBkZWFsbG9jYXRlcyBhbGwgbWVtb3J5IGFsbG9jYXRlZCAKICAgIC8vIGJ5IGdyYXBoaWNzIHN5c3RlbSAuIAogICAgY2xvc2VncmFwaCgpOyAKICAgIH0KICAgIH0KICAgIC8vIHRoaXMgZnVuY3Rpb24gc2h1dHMgZ3JhcGhpY3MgbW9kZSBkb3duCiAgICAvLyBpdCB3aWxsIHdvcmsgb25seSBpZiB5b3UncmUgdXNpbmcgQm9ybGFuZCBDKysgY29tcGlsZXIgJiBCR0kgZHJpdmVycwogICAgLy8gaWYgeW91J3JlIHVzaW5nIGFub3RoZXIgY29tcGlsZXIgeW91IHNob3VsZCBvdmVyd3JpdGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uCiAgICB2b2lkIGVuZF9ncih2b2lkKQogICAgewogICAgY2xvc2VncmFwaCgpOwogICAgfQogICAgLy8gdGhpcyBmdW5jdGlvbiBtb3ZlcyBDUCB0byAoeCx5KSBwb3NpdGlvbgogICAgLy8gaXQgd2lsbCB3b3JrIG9ubHkgaWYgeW91J3JlIHVzaW5nIEJvcmxhbmQgQysrIGNvbXBpbGVyICYgQkdJIGRyaXZlcnMKICAgIC8vIGlmIHlvdSdyZSB1c2luZyBhbm90aGVyIGNvbXBpbGVyIHlvdSBzaG91bGQgb3ZlcndyaXRlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbgogICAgdm9pZCBNb3ZlVG8oaW50IHgsIGludCB5KQogICAgewogICAgbW92ZXRvKHgseSk7CiAgICB9CiAgICAvLyB0aGlzIGZ1bmN0aW9uIGRyYXdzIGEgbGluZSB0byAoeCx5KSBwb3NpdGlvbgogICAgLy8gaXQgd2lsbCB3b3JrIG9ubHkgaWYgeW91J3JlIHVzaW5nIEJvcmxhbmQgQysrIGNvbXBpbGVyICYgQkdJIGRyaXZlcnMKICAgIC8vIGlmIHlvdSdyZSB1c2luZyBhbm90aGVyIGNvbXBpbGVyIHlvdSBzaG91bGQgb3ZlcndyaXRlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbgogICAgdm9pZCBMaW5lVG8oaW50IHgsIGludCB5KQogICAgewogICAgbGluZXRvKHgseSk7CiAgICB9CiAgICBjb25zdCBOPTY7IC8vIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGZpZ3VyZQogICAgLy8gY29vcmRpbmF0ZXMgb2YgYWxsIGdpdmVuIHBvaW50cwogICAgZW51bSBhY3Rpb25zIHtNT1ZFLERSQVd9OwogICAgc3RydWN0CiAgICB7CiAgICBhY3Rpb25zIGFjdGlvbjsKICAgIGludCB4OwogICAgaW50IHk7CiAgICB9IGZpZ3VyZVtOXT17e01PVkUsMzYwLDI3MH0se0RSQVcsMzYwLDI2MH0se0RSQVcsMzU1LDI2MH0se0RSQVcsMzYwLDI1MH0sCiAgICB7RFJBVywzNjUsMjYwfSx7RFJBVywzNjAsMjYwfX07CiAgICBpbnQgeDAseTAsZHgsZHk7CiAgICBmbG9hdCBwaGk7CiAgICBpbnQgbWFpbih2b2lkKQogICAgewogICAgLy8gaW5pdGlhbGl6aW5nIGdyYXBoaWNzIG1vZGUKICAgIGluaXRfZ3IoKTsKICAgIC8vIHJvdGF0aW5nIGFib3V0ICh4MCx5MCkKICAgIHgwPTMwMDsKICAgIHkwPTI2MDsKICAgIC8vIGJ5IDEwIGRlZ3JlZXMKICAgIHBoaT00NS4wKlBpLzE4MC4wOwogICAgLy8gbWFpbiBsb29wCiAgICBmb3IoaW50IGk9MDtpPDg7aSsrKQogICAgewogICAgLy8gcm90YXRpbmcgdGhlIGZpZ3VyZQogICAgZm9yIChpbnQgaj0wO2o8TjtqKyspCiAgICB7CiAgICBkeD1maWd1cmVbal0ueC14MDsKICAgIGR5PWZpZ3VyZVtqXS55LXkwOwogICAgZmlndXJlW2pdLng9eDArZHgqY29zKHBoaSktZHkqc2luKHBoaSk7CiAgICBmaWd1cmVbal0ueT15MCtkeCpzaW4ocGhpKStkeSpjb3MocGhpKTsKICAgIH0KICAgIC8vIGRyYXdpbmcgcm90YXRlZCBmaWd1cmUKICAgIGZvciAoaj0wO2o8TjtqKyspCiAgICBpZiAoZmlndXJlW2pdLmFjdGlvbj09TU9WRSkKICAgIE1vdmVUbyhmaWd1cmVbal0ueCxmaWd1cmVbal0ueSk7CiAgICBlbHNlCiAgICBMaW5lVG8oZmlndXJlW2pdLngsZmlndXJlW2pdLnkpOwogICAgfQogICAgLy8gY2xlYW4gdXAKICAgIGdldGNoKCk7CiAgICBlbmRfZ3IoKTsKICAgIHJldHVybiAwOwogICAgfQ==