Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.76 KB | None | 0 0
  1. /*
  2.  * File:   main_stepByStep.cpp
  3.  * Author: polpe
  4.  *
  5.  * Created on February 10, 2014, 3:24 PM
  6.  */
  7.  
  8. #include <cstdlib>
  9. #include <iostream>
  10.  
  11. #include <gl/gl.h>
  12. #include <gl/glu.h>
  13. #include <glut.h>
  14.  
  15. #define MAXARRAYSIZE 100
  16. #define MAXPTNUM 100
  17.  
  18. struct MyPoint
  19. {
  20.     double x,y;
  21.     MyPoint() : x(0), y(0) {}
  22.     MyPoint(int x, int y) : x(x), y(y) {}
  23. };
  24.  
  25. //Töröttvonal egyes pontjainak x ill y koordinátáit tartalmazó tömb: (lehet máshogy is reprezentálni...)
  26. int xcoord[MAXARRAYSIZE];
  27. int ycoord[MAXARRAYSIZE];
  28. int ptnum=0;
  29. MyPoint ctrlpoints[MAXPTNUM];
  30. double knotVector[MAXPTNUM];
  31.  
  32. //Ablakméret:
  33. int wH=400;
  34. int wW=400;
  35.  
  36. //Saját globális válzotók
  37.  
  38. //Ide írj, ha van saját inicializálási feladat
  39. void SajatInit() {
  40. }
  41.  
  42. float B(int i, float t)
  43. {
  44.     GLfloat Bi = 1.0;
  45.     int j = 1;
  46.     for(; j <= i; j++) Bi *= t * (ptnum-j)/j;
  47.     for(; j < ptnum; j++) Bi *= (1-t);
  48.     return Bi;
  49. }
  50.  
  51. MyPoint CalcLagrangePoint (float t) {
  52.     MyPoint actPT(0,0);
  53.     for (int i = 0; i <= ptnum; i++)
  54.     {
  55.         actPT.x+=ctrlpoints[i].x*B(i,t);
  56.         actPT.y+=ctrlpoints[i].y*B(i,t);
  57.     }
  58.     return actPT;
  59. }
  60.  
  61. void drawLagrange()
  62. {
  63.     for (int i=0;i< ptnum;i++) {
  64.         knotVector[i]=(double)i/(double(ptnum-1));
  65.     }
  66.  
  67.     MyPoint a(0,0);
  68.     MyPoint b(0,0);
  69.  
  70.     a = CalcLagrangePoint(0);
  71.     for(double j = 0.01; j <= 1; j += 0.01)
  72.     {
  73.         b = a;
  74.         a = CalcLagrangePoint(j);
  75.  
  76.         glBegin(GL_LINES);
  77.  
  78.         glVertex2d(b.x, b.y);
  79.         glVertex2d(a.x, a.y);
  80.  
  81.         glEnd();
  82.     }
  83. }
  84.  
  85. //Újrarajzolás
  86. void ReDraw( ) {
  87.     //Fehér háttér:
  88.     glClearColor(1.0, 1.0, 1.0, 0);
  89.     glClear(GL_COLOR_BUFFER_BIT);
  90.  
  91.  
  92.     //Fekete törtött vonal kirajzolása:
  93.     glColor3d(0.0,0.0,0.0);
  94.     glLineWidth(1);
  95.     glLineStipple(1,0x3F0);
  96.  
  97.     glBegin(GL_QUADS);
  98.     for(int i = 0; i < ptnum; i++)
  99.     {
  100.        glVertex2d(ctrlpoints[i].x+2,ctrlpoints[i].y+2);
  101.        glVertex2d(ctrlpoints[i].x+2,ctrlpoints[i].y-2);
  102.        glVertex2d(ctrlpoints[i].x-2,ctrlpoints[i].y-2);
  103.        glVertex2d(ctrlpoints[i].x-2,ctrlpoints[i].y+2);
  104.     }
  105.     glEnd();
  106.  
  107.     glBegin(GL_LINES);
  108.     drawLagrange();
  109.     glEnd();
  110.  
  111.     glFlush( );
  112. }
  113.  
  114.  
  115.  
  116.  
  117.  
  118. //Egér mozgára aktiválódik, kurzorpozíció koordinátáit kapja bemenetnek
  119. void Motion(int x, int y) {
  120.  
  121. }
  122.  
  123.  
  124. void MouseFunction(int button, int state, int x,int y)
  125. {
  126.  
  127.     //bal gomb lenyomására
  128.     if (button == GLUT_LEFT_BUTTON  && state == GLUT_DOWN) {
  129.                 ctrlpoints[ptnum].x = x;
  130.                 ctrlpoints[ptnum].y = y;
  131.                 ptnum++;
  132.     }
  133.  
  134.     //jobb gomb lenyomására/felengedésére (lásd 2.2 feladat)
  135.     if (button == GLUT_RIGHT_BUTTON) {
  136.  
  137.     }
  138.  
  139.     //A képernyő újrarajzolása (azaz redraw hívása)
  140.     glutPostRedisplay();
  141. }
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148. void Keyboard(unsigned char key, int x, int y) {
  149.  
  150. }
  151.  
  152.  
  153.  
  154. //--------------------------
  155. //  Keret (nem kell módosítani)
  156.  
  157. //Inicializálás
  158. void Init(){
  159.     glViewport(0, 0, wW, wH);
  160.     glMatrixMode(GL_MODELVIEW);
  161.     glLoadIdentity( );
  162.     glMatrixMode(GL_PROJECTION);
  163.     glLoadIdentity( );
  164.     gluOrtho2D(0.0, wW, wH, 0.0);
  165.     SajatInit();
  166. }
  167.  
  168. //Ablak átméretezésekor a teljes képet skálázza
  169. void reshape(int w, int h) {
  170.     glViewport(0,0,(GLsizei)w,(GLsizei)h);
  171.     glMatrixMode(GL_PROJECTION);
  172.     glLoadIdentity();
  173.     gluOrtho2D(0.0, wW, wH, 0.0);
  174.     wW=w;
  175.     wH=h;
  176. }
  177.  
  178. int main(int argc, char* argv[])
  179. {
  180.     wW=400;
  181.     wH=400;
  182.     glutInitWindowSize(wW, wH);
  183.     glutInitWindowPosition(100, 100);
  184.     glutInit(&argc, argv);
  185.     glutInitDisplayMode( GLUT_RGB );
  186.     glutCreateWindow("DrawLine");
  187.     Init();
  188.  
  189.     glutKeyboardFunc( Keyboard );
  190.     glutDisplayFunc( ReDraw );
  191.     glutMouseFunc(MouseFunction);
  192.     glutMotionFunc(Motion);
  193.     glutReshapeFunc(reshape);
  194.     glutMainLoop();
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement