#include "stdafx.h"
#define PI 3.1415926535898
void circlepoints_arc(int
x, int y,int szog,int szog1,float sin0,float sin1,int _x,int _y) {
glPointSize(3.0);
if ( (0<=szog) && (szog<45) ) { //Az iv
I.-bol indul
glBegin(GL_POINTS);
if
((szog1<=45)&&(sin0<=x)&&(y<=sin1)) glVertex2f(y+_x,x+_y);
else if
(szog1<=90) { if (sin0<=x) glVertex2f(y+_x,x+_y);
if (y<=sin1) glVertex2f(x+_x,y+_y);
}
else if
(szog1<=135) { if (sin0<=x) glVertex2f(y+_x,x+_y);
glVertex2f(x+_x,y+_y);
if (y>=sin1) glVertex2f(-x+_x,y+_y);
}
else if
(szog1<=180) { if (sin0<=x) glVertex2f(y+_x,x+_y);
glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
if (x>=sin1) glVertex2f(-y+_x,x+_y);
}
else if
(szog1<=225) { if (sin0<=x) glVertex2f(y+_x,x+_y);
glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
if (-x>=sin1) glVertex2f(-y+_x,-x+_y);
}
else if
(szog1<=270) { if (sin0<=x) glVertex2f(y+_x,x+_y);
glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
if (sin1<=-y) glVertex2f(-x+_x,-y+_y);
}
else if
(szog1<=315) { if (sin0<=x) glVertex2f(y+_x,x+_y);
glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
if (sin1>=-y) glVertex2f(x+_x,-y+_y);
}
else if
(szog1<=360) { if (sin0<=x) glVertex2f(y+_x,x+_y);
glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
glVertex2f(x+_x,-y+_y);
if (sin1>=-x) glVertex2f(y+_x,-x+_y);
}
glEnd();
}
else if ( (szog<=90) ){
glBegin(GL_POINTS);
if (szog1<=90) { if ((sin0<=y) && (y<=sin1)) glVertex2f(x+_x,y+_y);}
else if
(szog1<=135) { if (sin0<=y) glVertex2f(x+_x,y+_y);
if (y>=sin1) glVertex2f(-x+_x,y+_y);
}
else if
(szog1<=180) { if (sin0<=y) glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
if (x>=sin1) glVertex2f(-y+_x,x+_y);
}
else if
(szog1<=225) { if (sin0<=y) glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
if (-x>=sin1) glVertex2f(-y+_x,-x+_y);
}
else if
(szog1<=270) { if (sin0<=y) glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
if (sin1<=-y) glVertex2f(-x+_x,-y+_y);
}
else if
(szog1<=315) { if (sin0<=y) glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
if (sin1>=-y) glVertex2f(x+_x,-y+_y);
}
else if
(szog1<=360) { if (sin0<=y) glVertex2f(x+_x,y+_y);
glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
glVertex2f(x+_x,-y+_y);
if (sin1>=-x) glVertex2f(y+_x,-x+_y);
}
glEnd();
}
else if ( szog<=135
){ //Az iv II.-bol indul
glBegin(GL_POINTS);
if (szog1<=135)
{ if ((sin0>=y) && (y>=sin1)) glVertex2f(-x+_x,y+_y); }
else if
(szog1<=180) { if (sin0>=y) glVertex2f(-x+_x,y+_y);
if (x>=sin1) glVertex2f(-y+_x,x+_y);
}
else if
(szog1<=225) { if (sin0>=y) glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
if (-x>=sin1) glVertex2f(-y+_x,-x+_y);
}
else if
(szog1<=270) { if (sin0>=y) glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
if (sin1<=-y) glVertex2f(-x+_x,-y+_y);
}
else if
(szog1<=315) { if (sin0>=y) glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
if (sin1>=-y) glVertex2f(x+_x,-y+_y);
}
else if
(szog1<=360) { if (sin0>=y) glVertex2f(-x+_x,y+_y);
glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
glVertex2f(x+_x,-y+_y);
if (sin1>=-x) glVertex2f(y+_x,-x+_y);
}
glEnd();
}
else if ( szog<=180
){
glBegin(GL_POINTS);
if (szog1<=180) { if ((sin0>=x) && (x>=sin1)) glVertex2f(-y+_x,x+_y);}
else if
(szog1<=225) { if (sin0>=x) glVertex2f(-y+_x,x+_y);
if (-x>=sin1) glVertex2f(-y+_x,-x+_y);
}
else if
(szog1<=270) { if (sin0>=x) glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
if (sin1<=-y) glVertex2f(-x+_x,-y+_y);
}
else if
(szog1<=315) { if (sin0>=x) glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
if (sin1>=-y) glVertex2f(x+_x,-y+_y);
}
else if
(szog1<=360) { if (sin0>=x) glVertex2f(-y+_x,x+_y);
glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
glVertex2f(x+_x,-y+_y);
if (sin1>=-x) glVertex2f(y+_x,-x+_y);
}
glEnd();
}
else if ( szog<=225
){ //Az iv III.-bol indul
glBegin(GL_POINTS);
if (szog1<=225) { if ((sin0>=-x) && (-x>=sin1)) glVertex2f(-y+_x,-x+_y);}
else if
(szog1<=270) { if (sin0>=-x) glVertex2f(-y+_x,-x+_y);
if (sin1<=-y) glVertex2f(-x+_x,-y+_y);
}
else if
(szog1<=315) { if (sin0>=-x) glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
if (sin1>=-y) glVertex2f(x+_x,-y+_y);
}
else if
(szog1<=360) { if (sin0>=-x) glVertex2f(-y+_x,-x+_y);
glVertex2f(-x+_x,-y+_y);
glVertex2f(x+_x,-y+_y);
if (sin1>=-x) glVertex2f(y+_x,-x+_y);
}
glEnd();
}
else if ( szog<=270
){
glBegin(GL_POINTS);
if (szog1<=270) { if ((sin0>=-y) && (sin1<=-y)) glVertex2f(-x+_x,-y+_y);}
else if
(szog1<=315) { if (sin0>=-y) glVertex2f(-x+_x,-y+_y);
if (sin1>=-y) glVertex2f(x+_x,-y+_y);
}
else if
(szog1<=360) { if (sin0>=-y) glVertex2f(-x+_x,-y+_y);
glVertex2f(x+_x,-y+_y);
if (sin1>=-x) glVertex2f(y+_x,-x+_y);
}
glEnd();
}
else if ( szog<=315
){ //Az iv IV.-bol indul
glBegin(GL_POINTS);
if (szog1<=315) { if ((sin0<=-y) && (sin1>=-y)) glVertex2f(x+_x,-y+_y);
}
else if
(szog1<=360) { if (sin0<=-y) glVertex2f(x+_x,-y+_y);
if (sin1>=-x) glVertex2f(y+_x,-x+_y);
}
glEnd();
}
else if ( szog<=360
){
glBegin(GL_POINTS);
if (szog1<=360) { if ((sin0<=-x) && (sin1>=-x)) glVertex2f(y+_x,-x+_y);}
glEnd();
}
glFlush();
}
void arc(int x0,int y0,int
alfa,int beta, int radius) {
double x,y,d;
float sinus0,sinus1;
if (alfa>beta){
x=alfa;
alfa=beta;
beta=x;
}
sinus0=radius*sin(alfa*PI/180);
sinus1=radius*sin(beta*PI/180);
x =0;
y =radius
;
d = 1 - radius;
circlepoints_arc(x,y,alfa,beta,sinus0,sinus1,x0,y0);
while(y > x) {
if(d < 0) {
d += 2*x + 3;
x++;
}
else {
d += 2*(x - y) + 5;
x++;
y--;
}
circlepoints_arc(x,y,alfa,beta,sinus0,sinus1,x0,y0);
}
}
void sziv(int x,int y){
arc(-30+x,10+y,0,270,30);
arc(30+x,10+y,0,180,30);
arc(30+x,10+y,270,360,30);
arc(-30+x,-50+y,0,90,30);
arc(30+x,-50+y,90,180,30);
}
void level(int x,int
y){
arc(-20+x,40+y,270,360,20);
arc(20+x,40+y,180,270,20);
arc(-20+x,0+y,90,270,20);
arc(20+x,0+y,0,90,20);
arc(20+x,0+y,270,360,20);
glLineWidth(3.0);
glBegin(GL_LINES);
glVertex2f(-10+x,-30+y);
glVertex2f(-10+x,-40+y);
glVertex2f(10+x,-30+y);
glVertex2f(10+x,-40+y);
glVertex2f(-20+x,-50+y);
glVertex2f(20+x,-50+y);
glEnd();
arc(-20+x,-30+y,0,90,10);
arc(-20+x,-40+y,270,360,10);
arc(20+x,-30+y,180,90,10);
arc(20+x,-40+y,180,270,10);
}
void virag(int x,int
y,int r){
// arc(0+x,0+y,0,360,r);
arc(r+x,0+y,120,240,r);
arc(-r+x,0+y,0,60,r);
arc(-r+x,0+y,300,360,r);
arc(cos( 60*PI/180)*r+x,sin(
60*PI/180)*r+y,180,300,r);
arc(cos(120*PI/180)*r+x,sin(120*PI/180)*r+y,240,360,r);
arc(cos(240*PI/180)*r+x,sin(240*PI/180)*r+y,0,120,r);
arc(cos(300*PI/180)*r+x,sin(300*PI/180)*r+y,60,180,r);
}
void init() {
glClearColor(1.0,1.0,1.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-200,200,-200,200);
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1.0,0.0,0.0);
sziv(-90,90);
glColor3d(0.0,0.8,0.0);
level(100,100);
glColor3d(0.8,0.0,0.6);
virag(0,-45,60);
}
void keyboard( unsigned
char key, int x,int y) {
switch (key) {
case 27:
exit(0);
break;
}
}
int APIENTRY WinMain(HINSTANCE
hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
glutInitDisplayMode(GLUT_SINGLE
| GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("körívek_1");
init();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}