5th program.. :)
Gear
============
#include <GL/glut.h>
#include <math.h>
#include<stdlib.h>
#include<iostream.h>
#include <stdio.h>
#include <string.h>
#define RPI 0.01745329251944
typedef struct {
float x,y;
} object;
typedef struct {
float r,g,b;
}color;
void setColor(color col){
glColor3f(col.r,col.g,col.b);
}
void update(int value)
{
glutPostRedisplay();
glutTimerFunc(50,update,0);
}
static void createcircle(object p[], object p0, float r,int n)
{
float a=6.28/n;
for(int i=0;i<n;i++){
p[i].x=p0.x+r*cos(i*a);
p[i].y=p0.y+r*sin(i*a);
}
}
void drawPoly(object p[],int n,float x,float y,color col){
glBegin(GL_POLYGON);
setColor(col);
for(int i=0;i<n;i++) glVertex2f(p[i].x+x,p[i].y+y);
glEnd();
}
void fillPolygon(object p[], color col,int n){
glBegin(GL_POLYGON);
setColor(col);
for(int i=0;i<n;i++)
glVertex2f(p[i].x,p[i].y);
glEnd();
}
color
pink={0.7,0.4,0.5},
merah={1,0,0},
biru={0,0,1},
biru2={0,0.5,0.75},
kuning={1,1,0},
coklat={0.5,0,0},
coklat2={0.7,0.2,0},
coklat3={0.7,0.2,0},
putih={1,1,1},
violet={0.8,0.5,0.9},
birutua={0.0,0.1,0.2},
birutua2={0,0.1,0.5},
hijau={0,1,0},
cyan={0,1,1},
magenta={1,0,1},
ungumuda={0.5,0.5,1},
orange={1,0.5,0},
orange2={1,0.5,0.5},
hijau2={0,0.75,0},
birumuda={0.2,0.8,0.8},
abu={0.5,0.5,0.5},
abu3={0.2,0.2,0.2},
abu2={0.75,0.75,0.75},
pink1={1,0,0.5},
pink2={1,0,1},
pink3={1,0.5,1},
hijau3={0,0.5,0},
mbulak={0.1,0.2,0.5},
kuning2={0.8,0.5,0.1},
hitam={0,0,0},
ungu={0.3, 0.2, 0.6};
void kartesius()
{
glLineWidth(1);
glColor3f(0,0,1);
for(float x=-640;x<=640;x+=20)
{
glBegin(GL_LINES);
glVertex2f(x,-640);
glVertex2f(x,640);
glEnd();
glBegin(GL_LINES);
glVertex2f(-640,x);
glVertex2f(640,x);
glEnd();
}
glColor3f(0,1,1);
glBegin(GL_LINES);
glVertex2f(640,0);
glVertex2f(-640,0);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-640);
glVertex2f(0,640);
glEnd();
}
void write(float x, float y, float z, void *font, char *string)
{
char *c;
glRasterPos3f(x, y,z);
for (c=string; *c != '\0'; c++)
{
glutBitmapCharacter(font, *c);
}
}
void title()
{
glColor3f(0.,0.,0.);
write(15, 220, 0, GLUT_BITMAP_HELVETICA_12 , "Muhammad Ridwan");
write(15, 215, 0, GLUT_BITMAP_HELVETICA_12 , "7609040003") ;
}
void tick(object p[], int n){
float xki, xka, yki, yka;
float xt, yt, dx, dy;
xki = p[0].x; yki = p[0].x;
xka = p[0].x; yka = p[0].y;
for(int i=0;i<n;i++){
if(p[i].x < xki) xki = p[i].x;
if(p[i].y < yki) yki = p[i].y;
if(p[i].x > xka) xka = p[i].x;
if(p[i].y > yka) yka = p[i].y;
}
xt = (xka - xki)/2;
yt = (yka - yki)/2;
dx = xt + xki;
dy = yt + yki;
for(i=0;i<n;i++){
p[i].x = p[i].x - dx;
p[i].y = p[i].y - dy;
}
}
void rotateobj(object p[], int n, float sdt){
float r=sdt*RPI;
for(int i=0;i<n;i++){
float x = p[i].x;
float y = p[i].y;
p[i].x=cos(r) * x - sin(r) * y;
p[i].y=sin(r) * x + cos(r) * y;
}
}
void rotatePrint(object p[],int n, float sdt, float xl,float yl,color col){
for(int i=0;i<360/sdt;i++){
rotateobj(p,n,sdt);
drawPoly(p,n,xl,yl,col);
}
}
object obj1[4]={{8,8},{22,8},{22,150},{8,150}};
object obj2[4]={{8,8},{24,8},{24,80},{8,80}};
object obj3[4]={{8,8},{25,8},{25,80},{8,80}};
void flag(){
tick(obj1,4);
tick(obj2,4);
tick(obj3,4);
}
void userdraw()
{
object tengah [360],gear1={80,93},gear2={180,95},gear3={245,113};
rotatePrint(obj1,4,30,80,93,hitam);
rotatePrint(obj2,4,60,180,95,hitam);
rotatePrint(obj3,4,60,245,113,hitam);
rotateobj(obj1,4,0.017);
rotateobj(obj2,4,-0.03);
rotateobj(obj3,4,0.03);
createcircle(tengah,gear1,55,360);
fillPolygon(tengah,hitam,360);
createcircle(tengah,gear2,20,360);
fillPolygon(tengah,hitam,360);
createcircle(tengah,gear2,5,360);
fillPolygon(tengah,abu3,360);
createcircle(tengah,gear3,5,360);
fillPolygon(tengah,abu3,360);
}
void display(void)
{ glClear(GL_COLOR_BUFFER_BIT);
userdraw();
//kartesius();
title();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
flag();
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(800,600);
glutCreateWindow("7609040003");
glClearColor(1,1,1,0);
gluOrtho2D(0.,320.,0.,240.);
glutTimerFunc(50,update,0);
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
No comments:
Post a Comment