Sei sulla pagina 1di 6

3:void DrawCylinder(float

r,float h)//tru{
float
x,y,z,Delta_U,Delta_V,u,v,Pi_
2;
Pi_2 = M_PI/2;
Delta_U =
0.06; Delta_V=0.3;
glBegin(GL_POINTS);
for(u=0;u<2*M_PI;u+=Delta_U){
for(v = 0;v<1;v+=Delta_V){
x= r*cos(u);
y= r*sin(u);
z= v*h;
glVertex3f(x,y,z);}}glEnd();}
void DrawCone(float r,float
h){
float
x,y,z,Delta_U,Delta_V,u,v,Pi_
2;
Pi_2 = M_PI/2;
Delta_U =
0.03; Delta_V=0.05;
glBegin(GL_POINTS);
for(u=0;u<2*M_PI;u+=Delta_U){
for(v = 0;v<1;v+=Delta_V){
x= v*r*cos(u);
y= v*r*sin(u);
z= v*h;
glVertex3f(x,y,z);}}
glEnd();}
void DrawSphere(float r) //ve
mat cau
{float
x,y,z,Delta_U,Delta_V,u,v,Pi_
2;
Pi_2 = M_PI/2;
Delta_U =
0.1; Delta_V=0.1;
glBegin(GL_POINTS);
for(v =
-Pi_2;v<Pi_2;v+=Delta_V){
for(u=0;u<2*M_PI;u+=Delta_U){
x= r*cos(u)*cos(v);
y= r*sin(u)*cos(v);
z= r*sin(v);
glVertex3f(x,y,z);}}
glEnd();}
void VeHinh(void){
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(gocX, 1.0f, 0.0f,
0.0f);
glRotatef(gocY, 0.0f, 1.0f,
0.0f);
glRotatef(gocZ, 0.0f, 0.0f,
1.0f);
if(hinh==1)
DrawCone(size,cao);
if(hinh==2)
DrawCylinder(size,cao);
if(hinh==3)
DrawSphere(size);
if(hinh==4)
EllipSoid(size);
if(hinh==5)
Hypeboloid(size);
if(hinh==6)
Mat_Xuyen(size,cao);
glPopMatrix();
glutSwapBuffers();
}

4:void PhimNhan(int key, int


x, int y){
if(key ==
GLUT_KEY_END)exit(0);
if(key == GLUT_KEY_DOWN)gocX= 5.0f;
if(key == GLUT_KEY_UP) gocX
+= 5.0f;
if(key == GLUT_KEY_RIGHT)gocY
-= 5.0f;
if(key == GLUT_KEY_LEFT)gocY
+= 5.0f;
if(key
==GLUT_KEY_PAGE_DOWN)gocZ -=
5.0f;
if(key ==
GLUT_KEY_PAGE_UP)gocZ +=
5.0f;
glutPostRedisplay();}
void mouse(int button, int
state, int x, int y) {
if((button==GLUT_LEFT_BUTTON)
& (state==GLUT_DOWN))
{size
= size + 0.05; cao = cao+
0.05;}
if((button==GLUT_RIGHT_BUTTON
) & (state==GLUT_DOWN)) {size
= size - 0.05; cao = cao0.05;}
glutPostRedisplay();}
void KhoiTaoMau(float r,float
g,float b){
glClearColor(0.0, 0.0, 0.0,
0.0 );
glColor3f(r, g,
b);}
void Keyboard(unsigned char
Key, int mouseX, int mouseY)
{switch(Key){
case 'r':
KhoiTaoMau(1.0,0.0,0.0);
break;
case 'g':
KhoiTaoMau(0.0,1.0,0.0);
break;
case 'b':
KhoiTaoMau(0.0,0.0,1.0);
break;
case '1':
hinh=1;
break;
case '2':
hinh=2;break;
case '3':
hinh=3;break;
case '4':
hinh=4;break;
case '5':
hinh=5;break;
case '6':
hinh=6;break;}
if(Key==13) exit(0);
glutPostRedisplay();}

5:int main(int argc, char**


argv){
glutInit(&argc, argv);
glutInitDisplayMode
(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (600,
600);
glutInitWindowPosition (50,
50);
glutCreateWindow("Quan
Sat Vat The 3D");
KhoiTaoMau(0.0,0.0,1.0);
glutDisplayFunc(VeHinh);
glutSpecialFunc(PhimNhan);
glutKeyboardFunc(Keyboard);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}

1:case 'g':
KhoiTaoMau(0.0,1.0,0.0);
break;
case 'b':
KhoiTaoMau(0.0,0.0,1.0);
break;
case '1':
hinh=1;
break;
case '2':
hinh=2;break;
case '3':
hinh=3;break;
case '4':
hinh=4;break;
case '5':
hinh=5;break;
case '6':
hinh=6;break;}
if(Key==13) exit(0);
glutPostRedisplay();}
int main(int argc,
char** argv){
glutInit(&argc, argv);
glutInitDisplayMode
(GLUT_DOUBLE |
GLUT_RGB);
glutInitWindowSize (600,
600);
glutInitWindowPosition
(50, 50);
glutCreateWindow("Quan
Sat Vat The 3D");
KhoiTaoMau(0.0,0.0,1.0);
glutDisplayFunc(VeHinh);
glutSpecialFunc(PhimNhan
);
glutKeyboardFunc(Keyboar
d);
glutMouseFunc(mouse);
glutMainLoop();
return 0;}
#include <glut.h>
#include <math.h>
#define M_PI
3.14159265358979323846
static GLfloat gocX =
0.0f;
static GLfloat gocY =
0.0f static GLfloat
gocZ = 0.0f;
static GLfloat cao =
0.5;
static GLfloat size =
0.5;
int hinh = 1;
void matcong(GLfloat s){
glutWireTeapot(s);}

2:void
Hypeboloid(float r)
//ve mat Hypeboloid{
float
x,y,z,Delta_U,Delta_V,
u,v;
Delta_U = 0.1;
Delta_V=0.1;
glBegin(GL_POINTS);
for(u=1;u<1;u+=Delta_U){
for(v =
-1;v<1;v+=Delta_V){
x= u*r;y= v*r;z=
r*(u*u-v*v);
glVertex3f(x,y,z);}}
glEnd();}
void Mat_Xuyen(float
r, float h) //ve mat
xuyen{
float
x,y,z,Delta_U,Delta_V,
u,v,Pi_2;Pi_2 =
M_PI/2;
Delta_U =
0.1; Delta_V=0.1;
glBegin(GL_POINTS);
for(u=0;u<2*M_PI;u+=De
lta_U)
{
for(v =
0;v<2*M_PI;v+=Delta_V)
{
x=
(r+h*cos(v))*cos(u);
y=
(r+h*cos(v))*sin(u);
z= h*sin(v);
glVertex3f(x,y,z);}}
glEnd();}
void EllipSoid(float
r) //ve mat Ellipsoid{
float
x,y,z,Delta_U,Delta_V,
u,v,Pi_2,rx=r+0.1,ry=r
-0.3,rz=r-0.1;
Pi_2 = M_PI/2;
Delta_U = 0.1;
Delta_V=0.1;
glBegin(GL_POINTS);
for(v =
-Pi_2;v<Pi_2;v+=Delta_
V){
for(u=0;u<2*M_PI;u+=De
lta_U){
x= rx*cos(u)*cos(v);
y= ry*sin(u)*cos(v);
z= rz*sin(v);
glVertex3f(x,y,z);}}
glEnd();}

-2:Nop tru, cau ;


#include <glut.h>
#include <math.h>
#define M_PI 3.141592653
static GLfloat gocX = 0.0f;
static GLfloat gocY =
0.0f;static GLfloat gocZ =
0.0f;
static GLfloat cao = 0.5;
static GLfloat size = 0.5;int
hinh = 1;
void matcong(GLfloat s){
glutWireTeapot(s);}
void Hypeboloid(float r) {
float
x,y,z,Delta_U,Delta_V,u,v;
Delta_U = 0.1;
Delta_V=0.1;
glBegin(GL_POINTS);
for(u=-1;u<1;u+=Delta_U){
for(v = -1;v<1;v+=Delta_V){
x= u*r;y= v*r;z= r*(u*u-v*v);
glVertex3f(x,y,z);}}
glEnd();}
void Mat_Xuyen(float r, float
h) {
float
x,y,z,Delta_U,Delta_V,u,v,Pi_
2;
Pi_2 = M_PI/2;
Delta_U =
0.1; Delta_V=0.1;
glBegin(GL_POINTS);
for(u=0;u<2*M_PI;u+=Delta_U){
for(v =
0;v<2*M_PI;v+=Delta_V){
x= (r+h*cos(v))*cos(u);
y= (r+h*cos(v))*sin(u);
z= h*sin(v);
glVertex3f(x,y,z);}}
glEnd();}
void EllipSoid(float r)
{float
x,y,z,Delta_U,Delta_V,u,v,Pi_
2,rx=r+0.1,ry=r-0.3,rz=r-0.1;
Pi_2 = M_PI/2;
Delta_U =
0.1; Delta_V=0.1;
glBegin(GL_POINTS);
for(v =
-Pi_2;v<Pi_2;v+=Delta_V){
for(u=0;u<2*M_PI;u+=Delta_U){
x= rx*cos(u)*cos(v);
y= ry*sin(u)*cos(v);
z= rz*sin(v);
glVertex3f(x,y,z);}}
glEnd();}
void
DrawCylinder(floatr,float
h)//tru{
float
x,y,z,Delta_U,Delta_V,u,v,Pi_
2;
Pi_2 = M_PI/2;
Delta_U =
0.06; Delta_V=0.3;
glBegin(GL_POINTS);
for(u=0;u<2*M_PI;u+=Delta_U){
for(v = 0;v<1;v+=Delta_V){
x= r*cos(u);y= r*sin(u);z=
v*h;
glVertex3f(x,y,z);}}
glEnd();}

-1:void VeHinh(void){
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(gocX, 1.0f, 0.0f,
0.0f);
glRotatef(gocY, 0.0f, 1.0f,
0.0f);
glRotatef(gocZ, 0.0f, 0.0f,
1.0f);
if(hinh==1)
DrawCone(size,cao);
if(hinh==2)
DrawCylinder(size,cao);
if(hinh==3)
DrawSphere(size);
if(hinh==4)
EllipSoid(size);
if(hinh==5)
Hypeboloid(size);
if(hinh==6)
Mat_Xuyen(size,cao);
glPopMatrix();
glutSwapBuffers(); }
void PhimNhan(int key, int x,
int y){
if(key ==
GLUT_KEY_END)exit(0);
if(key == GLUT_KEY_DOWN)gocX= 5.0f;
if(key == GLUT_KEY_UP) gocX
+= 5.0f;
if(key == GLUT_KEY_RIGHT)gocY
-= 5.0f;
if(key == GLUT_KEY_LEFT)gocY
+= 5.0f;
if(key
==GLUT_KEY_PAGE_DOWN)gocZ -=
5.0f;
if(key ==
GLUT_KEY_PAGE_UP)gocZ +=
5.0f;
glutPostRedisplay();
}void mouse(int button, int
state, int x, int y)
{ if
((button==GLUT_LEFT_BUTTON)
& (state==GLUT_DOWN))
{size
= size + 0.05; cao = cao+
0.05;}if
((button==GLUT_RIGHT_BUTTON)
& (state==GLUT_DOWN))
{size
= size - 0.05; cao = cao0.05;}glutPostRedisplay();}
void KhoiTaoMau(float r,float
g,float b)
{glClearColor(0.0, 0.0, 0.0,
0.0 );
glColor3f(r, g, b);}
void Keyboard(unsigned char
Key, int mouseX, int mouseY){
switch(Key){
case 'r':
KhoiTaoMau(1.0,0.0,0.0);
break;

0:void DrawCone(float
r,float h){ float
x,y,z,Delta_U,Delta_V,u
,v,Pi_2;
Pi_2 = M_PI/2;
Delta_U = 0.03;
Delta_V=0.05;
glBegin(GL_POINTS);
for(u=0;u<2*M_PI;u+=Del
ta_U){
for(v =
0;v<1;v+=Delta_V){
x= v*r*cos(u);y=
v*r*sin(u);
z= v*h;
glVertex3f(x,y,z);}}
glEnd();}
void DrawSphere(float
r) {
float
x,y,z,Delta_U,Delta_V,u
,v,Pi_2;Pi_2 = M_PI/2;
Delta_U = 0.1;
Delta_V=0.1;
glBegin(GL_POINTS);
for(v =
-Pi_2;v<Pi_2;v+=Delta_V
){
for(u=0;u<2*M_PI;u+=Del
ta_U){
x= r*cos(u)*cos(v);
y= r*sin(u)*cos(v);
z= r*sin(v);
glVertex3f(x,y,z);}}glE
nd();}

2:m=(double)(B.y-A.y)/(B.xA.x);
if(A.x<Wmin.x){
A.y=A.y+(Wmin.x-A.x)*m;
A.x=Wmin.x;}
else
if(A.x>Wmax.x){
A.y=A.y+(Wmax.x-A.x)*m;
A.x=Wmax.x;}
else
if(A.y<Wmin.y)
A.x=A.x+(Wmin.y-A.y)/m;
A.y=Wmin.y;}
else
if(A.y>Wmax.y){
A.x=A.x+(Wmax.y-A.y)/m;
A.y=Wmax.y;}}}}
if(ve) VeDT(A,B);}
void VeHCN(Point Wmin,Point
Wmax){
glBegin(GL_LINE_LOOP);
glVertex2f (Wmin.x, Wmin.y
glVertex2f (Wmin.x, Wmax.y);
glVertex2f (Wmax.x, Wmax.y);
glVertex2f (Wmax.x, Wmin.y);
glEnd();}
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT)
;
glColor3f(0.0, 1.0, 0.0);
VeHCN(Wmin,Wmax);
glColor3f(0.0, 0.0,1.0 );
VeDT(A,B);
glColor3f(1.0, 0.0,0.0);
ClipCohen(A, B, Wmin,Wmax);
glFlush();}
int main(int argc, char**
argv){
glutInitDisplayMode
(GLUT_SINGLE |
GLUT_RGB);glutInitWindowSize
(600,
600);glutInitWindowPosition
(10,
10);glutCreateWindow("VE
elip DUNG TT mid");
gluOrtho2D(-300, 300, -300,
300);
glClearColor(0.0,0.0,0.0,0.0
);Wmin.x=-100;
Wmin.y=60;
Wmax.x= 100;
Wmax.y= 60;
A.x=-120;
A.y=-90;
B.x= 250;
B.y= 50;
glutDisplayFunc(mydisplay);
glutMainLoop();
return 0;
}

1:Hinh vuong mid:


#include <glut.h>
#include <math.h>
typedef struct{
int x;
int y;}Point ;
Point Wmin,Wmax,A,B;
int ma(Point A){
int m=0;
if (A.x<Wmin.x) m|=1;
if (A.x>Wmax.x) m|=2;
if (A.y<Wmin.y) m|=4;
if (A.y>Wmax.y) m|=8;
return m;}
void VeDT(Point A,Point B){
glBegin(GL_LINES);
glVertex2f (A.x, A.y );
glVertex2f (B.x, B.y);
glEnd(); }
void hoanvi(Point* A,Point*
B){
Point t=*A;*A=*B;*B=t;}
void ClipCohen(Point A,
Point B, Point wmin,Point
wmax){
int thoat, ve;
double m;
thoat=0; ve=1;
while(thoat==0){
if((ma(A)|ma(B))==0)
thoat=1;
else
if((ma(A) & ma(B))!=0) {
thoat=1;
ve=0;}
else {
if(ma(A)==0) hoanvi(&A,&B);
if(A.x==B.x){
if(A.y>Wmax.y) A.y=Wmax.y;
else A.y=Wmin.y;}
else {

Elip :
#include <glut.h>
#include <math.h>
int xc=90;
int yc=90;
int a=20,b=50;
void vedt(int xc, int yc,
int x,int y){
glVertex2i(x+xc,y+yc);
glVertex2i(x+xc,-y+yc);
glVertex2i(-x+xc,-y+yc);
glVertex2i(-x+xc,y+yc);}
void ElipBes(int xc, int yc,
int a,int b){
double x,y,p,x0,y0,a2,b2;
a2=a*a;b2 = b*b;x=0;y=b;
p=-2*b+1+2*b2/a2;
x0=a2/sqrt(a2+b2);
y0=b2/sqrt(a2+b2);
x=0;y=b;
glBegin(GL_POINTS);
while (x<=x0){
vedt(xc,yc,x,y);
if (p<0)
p+=2*b2*(2*x+3)/a2;
else{
p+=4*(1-y)+2*b2*(2*x+3)/a2;
y--;}
x++;}
x=a;y=0; p=2*a2/b2-2*a+1;
while(y<=y0){
vedt(xc,yc,x,y);if(p<0)
p+=2*a2*(2*y+3)/b2;
else{
p+=4*(1-x)+2*a2*(2*y+3)/b2;
x--;}y++;}
glEnd();}
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT)
;
glColor3f(1.0, 0.0, 0.0);
ElipBes(xc, yc, a,b);
glFlush();}
int main(int argc, char**
argv){
glutInitDisplayMode
(GLUT_SINGLE |
GLUT_RGB);glutInitWindowSize
(600, 600);
glutInitWindowPosition (10,
10); glutCreateWindow("VE
DUONG TRON DUNG TT
BRESENHAM");
glClearColor(1.0,1.0,1.0,0.0
);
glOrtho(-300, 300, -300,
300, -1.0, 1.0);
glutDisplayFunc(mydisplay);
glutMainLoop();
}

void VeHCN(Point Wmin,Point


Wmax){
glBegin(GL_LINE_LOOP);
glVertex2f (Wmin.x,
Wmin.y );glVertex2f (Wmin.x,
Wmax.y);
glVertex2f (Wmax.x, Wmax.y);
glVertex2f (Wmax.x, Wmin.y);
glEnd();}
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT)
;
glColor3f(0.0, 1.0, 0.0);
VeHCN(Wmin,Wmax);
glColor3f(0.0, 0.0, 1.0);
VeDT(A,B);
glColor3f(1.0, 0.0, 0.0);
hinhnhiphan(A,B);glFlush();}
int main(int argc, char**
argv){
glutInitDisplayMode
(GLUT_SINGLE |
GLUT_RGB);glutInitWindowSize
(600,
600);glutInitWindowPosition
(10, 10);
glutCreateWindow("nhi
phan");
gluOrtho2D(-300, 300, -300,
300);
glClearColor(0.0,0.0,0.0,0.0
);
Wmin.x=-100;Wmin.y=-60;
Wmax.x= 100;
Wmax.y= 60;
A.x=-120;
A.y=-90;
B.x= 250;
B.y=
50;
glutDisplayFunc(mydisplay);
glutMainLoop();
return 0;
}

Hinh v nhi phan:


#include <glut.h>
#include <math.h>
typedef struct{int
x;int y;
}Point ;
Point Wmin,Wmax,A,B;
void VeDT(Point A,Point
B){
glBegin(GL_LINES);
glVertex2f (A.x, A.y );
glVertex2f (B.x,
B.y);glEnd(); }
int Ma(Point A){
int m=0;
if (A.x<Wmin.x) m|=1;
if (A.x>Wmax.x) m|=2;
if (A.y<Wmin.y) m|=4;
if (A.y>Wmax.y) m|=8;
return m;}
void hoanvi(Point*
A,Point* B){
Point t=*A;*A=*B;*B=t;}
void hinhnhiphan(Point
A,Point B){
Point P,Q,M;
if((Ma(A)| Ma(B))==0)
VeDT(A,B);
if((Ma(A)& Ma(B))!
=0)return;
if((Ma(A)!
=0)&&( Ma(B)==0))
hoanvi(&A,&B);
if((Ma(A)==0)&&( Ma(B)!
=0))
{
P=A;Q=B;
while ((abs(P.x-Q.x)
+abs(P.y-Q.y))>2)
M.x=(P.x+Q.x)/2;
M.y=(P.y+Q.y)/2;
if (Ma(M)==0)P=M;
else Q=M;}
eDT(A,P);}
if(((Ma(A)!=0)&&(Ma(B)!
=0))&&((Ma(A)&Ma(B))==0
)){
P=A;Q=B;
M.x=(P.x+Q.x)/2;
M.y=(P.y+Q.y)/2;
while ((Ma(M)!
=0)&&((abs(P.x-Q.x)
+abs(P.y-Q.y))>2)){
if ((Ma(P)&Ma(M))!
=0)P=M;
else Q=M;
M.x=(P.x+Q.x)/2;
M.y=(P.y+Q.y)/2;}
if(Ma(M)==0){
hinhnhiphan(P,M);
hinhnhiphan(M,Q);}}}

Dung tron mid:


#include <glut.h>
#include <math.h>
int xc=50;
int yc=50;
int r=100;
void vedt(int xc, int yc,
int x,int y){
glVertex2i(x+xc,y+yc);
glVertex2i(y+xc,x+yc);
glVertex2i(y+xc,-x+yc);
glVertex2i(x+xc,-y+yc);
glVertex2i(-x+xc,-y+yc);
glVertex2i(-y+xc,-x+yc);
glVertex2i(-y+xc,x+yc);
glVertex2i(-x+xc,y+yc);}
void CircleBres(int xc, int
yc, int r){
int x=0,y=r,p=5/4-r;
glBegin(GL_POINTS);
while (x<=y){
vedt(xc,yc,x,y);
if (p<0)

p+=2*x+3;

else{
p+=2*(x-y)+5;y--;}
x++;}\glEnd();
}
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT)
;
glColor3f(1.0, 0.0, 0.0);
CircleBres(xc, yc, r);
glFlush();}int main(int
argc, char** argv)
{glutInitDisplayMode
(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize
(600, 600);
glutInitWindowPosition
(10, 10
glutCreateWindow("VE DUONG
TRON DUNG TT BRESENHAM");
glClearColor(1.0,1.0,1.0,0.0
);
glOrtho(-300, 300, -300,
300, -1.0, 1.0);
glutDisplayFunc(mydisplay);
glutMainLoop();
}

// Hinh` tron` beriel


#include <glut.h>
#include <math.h>
int xc=50;
int yc=50;
int r=100;
void vedt(int xc, int
yc, int x,int y){
glVertex2i(x+xc,y+yc);
glVertex2i(y+xc,x+yc);
glVertex2i(y+xc,x+yc);
glVertex2i(x+xc,y+yc);
glVertex2i(-x+xc,y+yc);
glVertex2i(-y+xc,x+yc);
glVertex2i(y+xc,x+yc);
glVertex2i(x+xc,y+yc);}
void CircleBres(int xc,
int yc, int r){
int x=0,y=r,p=3-2*r;
glBegin(GL_POINTS);
while (x<=y){
vedt(xc,yc,x,y);
if (p<0)p+=4*x+6;
else{
p+=4*(x-y)+10;y--;}
x++;}
glEnd();
}
void mydisplay(){
glClear(GL_COLOR_BUFFER_
BIT);
glColor3f(1.0, 0.0,
0.0);
CircleBres(xc, yc, r);
glFlush();}
int main(int argc,
char** argv){
glutInitDisplayMode
(GLUT_SINGLE | GLUT_RGB
glutInitWindowSize
(600, 600);
glutInitWindowPosition
(10, 10);
glutCreateWindow("VE
DUONG TRON DUNG TT
BRESENHAM");
glClearColor(1.0,1.0,1.0
,0.0);
glOrtho(-300, 300, -300,
300, -1.0, 1.0);
glutDisplayFunc(mydispla
y);
glutMainLoop();
}

Elip
#include <glut.h>
#include <math.h>
int xc=50;
int yc=50;
int a=50,b=20;
void vedt(int xc, int yc,
int x,int y){
glVertex2i(x+xc,y+yc);
glVertex2i(x+xc,-y+yc);
glVertex2i(-x+xc,-y+yc);
glVertex2i(-x+xc,y+yc);}
void ElipMid(int xc, int yc,
int a,int b){
int x,y,p;
float x0,y0,a2,b2;a2=a*a;b2
= b*b;
x0=(int)(a2/sqrt(a2+b2));
y0=(int)(b2/sqrt(a2+b2));
p=b2-a2*b+(1/4)*a2;x=0;y=b;
glBegin(GL_POINTS);
while (x<=x0){
vedt(xc,yc,x,y);
if (p<0)
p+=(2*x+3)*b2;
else{
p+=(2*x+3)*b2-2*a2*(y-1);
y--;}
x++;}
x=a;y=0; p=a2-a*b2+(1/4)*b2;
while(y<=y0){
vedt(xc,yc,x,y);
if(p<0)
p+=a2*(2*y+3);
else
{
p+=(2*y+3)*a2-2*b2*(x-1);
x--;}y++;}
glEnd();}
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT)
;
glColor3f(1.0, 0.0, 0.0);
ElipMid(xc, yc, a,b);
glFlush();}
int main(int argc, char**
argv){
glutInitDisplayMode
(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (600,
600);
glutInitWindowPosition (10,
10);
glutCreateWindow("elip
BRESENHAM");
glClearColor(1.0,1.0,1.0,0.0
);
glOrtho(-300, 300, -300,
300, -1.0, 1.0);
glutDisplayFunc(mydisplay);
glutMainLoop();
}

Potrebbero piacerti anche