Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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();
}
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();}
-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;
}
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();
}
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();
}
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();
}