Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include <GL/glut.h>
- #include <stdlib.h>
- //Ukuran layar awal
- int HEIGHT = 400;
- int WIDTH = 400;
- //Batas koordinat
- float X_MIN = -20.0;
- float X_MAX = 20.0;
- float Y_MIN = -20.0;
- float Y_MAX = 20.0;
- void grid()
- {
- double i;
- glColor3f(0.3,0.3,0.3);
- glBegin(GL_LINES);
- for(i=0;i<X_MAX;i++)
- {
- glVertex2f(i,Y_MAX);
- glVertex2f(i,Y_MIN);
- }
- for(i=0;i>X_MIN;i--)
- {
- glVertex2f(i,Y_MAX);
- glVertex2f(i,Y_MIN);
- }
- for(i=0;i<Y_MAX;i++)
- {
- glVertex2f(Y_MAX,i);
- glVertex2f(Y_MIN,i);
- }
- for(i=0;i>Y_MIN;i--)
- {
- glVertex2f(Y_MAX,i);
- glVertex2f(Y_MIN,i);
- }
- glEnd();
- //Titik Pusat (0,0)
- glColor3f(1.0,1.0,1.0);
- glPointSize(5);
- glBegin(GL_POINTS);
- glVertex2f(0,0);
- glEnd();
- }
- void spike(int n,float size){
- float sudut=(2*3.14)/n;
- float x,y;
- int i;
- glPointSize(5);
- glLineWidth(2);
- for(i=0;i<n;i++){
- //glColor3f((float) i/n,(float) i/n,(float) i/n);
- glBegin(GL_LINES);
- x=sin(i*sudut) * size;
- y=cos(i*sudut) * size;
- glVertex2f(0.0,0.0);
- glVertex2f(x,y);
- }
- glEnd();
- }
- void bintang(int n,float size){
- float sudut=(2*3.14)/n;
- float x,y;
- int i;
- glPointSize(5);
- glLineWidth(2);
- glBegin(GL_LINE_LOOP);
- //verterx ganjil
- for(i=1;i<=n;i+=2){
- x=sin(i*sudut) * size;
- y=cos(i*sudut) * size;
- glVertex2f(x,y);
- }
- //vertex genap
- for(i=2;i<=n;i+=2){
- x=sin(i*sudut) * size;
- y=cos(i*sudut) * size;
- glVertex2f(x,y);
- }
- glEnd();
- }
- void draw_pixel(float x, float y) {
- glColor3f(1.0, 0.0, 0.0);
- glBegin(GL_POLYGON);
- glVertex2f(x, y);
- glVertex2f(x+1, y);
- glVertex2f(x+1, y+1);
- glVertex2f(x, y+1);
- glEnd();
- }
- void naive(int x1, int y1, int x2, int y2)
- {
- int dx = x2 - x1;
- int dy = y2 - y1;
- draw_pixel(x1,y1);
- if(dx != 0) {
- float m = (float) dy / (float) dx;
- float b = y1 - m*x1;
- dx = (x2 > x1) ? 1 : -1;
- while (x1 != x2) {
- x1 += dx;
- y1 = (int)(m*x1 + b);
- draw_pixel(x1,y1);
- }
- }
- }
- void dda(int x1, int y1, int x2, int y2)
- {
- int dy = y2 - y1;
- int dx = x2 - x1;
- float t = (float) 0.5;
- draw_pixel(x1,y1);
- if (abs(dx) > abs(dy)) {
- float m = (float) dy / (float) dx;
- t += y1;
- dx = (dx<0) ? -1 : 1;
- m *= dx;
- while (x1 != x2){
- x1 += dx;
- t += m;
- draw_pixel(x1, (int) t);
- }
- }
- else {
- float m = (float) dx / (float) dy;
- t += x1;
- dy = (dy<0) ? -1 : 1;
- m *= dy;
- while( y1 != y2) {
- y1 += dy;
- t += m;
- draw_pixel((int)t,y1);
- }
- }
- }
- void BresenhamLine (int x0,int y0,int xend, int yend,int color)
- { int dx,dy, incre_p1, incre_p2, p, x, y;
- dy=yend-y0, dx=xend-x0;
- incre_p1=2*dy, incre_p2=2* (dy-dx);
- x=x0, y=y0;
- p=2*dy-dx;
- drawpixel(x, y, color);
- while (x<x1)
- { if (p<0) {x++, p+=incre_d1; }
- else {x++, y++,p+=incre_d2;}
- drawpixel (x, y, color);
- } /* while */
- } /* Bresenham */
- void display(){
- glClear(GL_COLOR_BUFFER_BIT);
- grid();
- //spike(5,10);
- //bintang(5,10);
- //naive(0,0,5,5);
- glFlush();
- }
- void init() {
- glClearColor( 0.0, 0.0, 0.0, 0.0);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(X_MIN,X_MAX,Y_MIN,Y_MAX);
- glMatrixMode(GL_MODELVIEW);
- }
- int main( int argc, char **argv) {
- glutInit( &argc, argv);
- glutInitWindowSize(WIDTH, HEIGHT);
- glutInitWindowPosition(0, 0);
- glutCreateWindow("Segi-N Beraturan");
- glutDisplayFunc(display);
- glEnable(GL_POINT_SMOOTH);
- glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND); //memperhalus garis
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // memperhalus garis
- init();
- glutMainLoop();
- return 0;
- }
Add Comment
Please, Sign In to add comment