Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main_stepByStep.cpp
- * Author: polpe
- *
- * Created on February 10, 2014, 3:24 PM
- */
- #include <cstdlib>
- #include <iostream>
- #include <gl/gl.h>
- #include <gl/glu.h>
- #include <glut.h>
- #define MAXARRAYSIZE 100
- #define MAXPTNUM 100
- struct MyPoint
- {
- double x,y;
- MyPoint() : x(0), y(0) {}
- MyPoint(int x, int y) : x(x), y(y) {}
- };
- //Töröttvonal egyes pontjainak x ill y koordinátáit tartalmazó tömb: (lehet máshogy is reprezentálni...)
- int xcoord[MAXARRAYSIZE];
- int ycoord[MAXARRAYSIZE];
- int ptnum=0;
- MyPoint ctrlpoints[MAXPTNUM];
- double knotVector[MAXPTNUM];
- //Ablakméret:
- int wH=400;
- int wW=400;
- //Saját globális válzotók
- //Ide írj, ha van saját inicializálási feladat
- void SajatInit() {
- }
- float B(int i, float t)
- {
- GLfloat Bi = 1.0;
- int j = 1;
- for(; j <= i; j++) Bi *= t * (ptnum-j)/j;
- for(; j < ptnum; j++) Bi *= (1-t);
- return Bi;
- }
- MyPoint CalcLagrangePoint (float t) {
- MyPoint actPT(0,0);
- for (int i = 0; i <= ptnum; i++)
- {
- actPT.x+=ctrlpoints[i].x*B(i,t);
- actPT.y+=ctrlpoints[i].y*B(i,t);
- }
- return actPT;
- }
- void drawLagrange()
- {
- for (int i=0;i< ptnum;i++) {
- knotVector[i]=(double)i/(double(ptnum-1));
- }
- MyPoint a(0,0);
- MyPoint b(0,0);
- a = CalcLagrangePoint(0);
- for(double j = 0.01; j <= 1; j += 0.01)
- {
- b = a;
- a = CalcLagrangePoint(j);
- glBegin(GL_LINES);
- glVertex2d(b.x, b.y);
- glVertex2d(a.x, a.y);
- glEnd();
- }
- }
- //Újrarajzolás
- void ReDraw( ) {
- //Fehér háttér:
- glClearColor(1.0, 1.0, 1.0, 0);
- glClear(GL_COLOR_BUFFER_BIT);
- //Fekete törtött vonal kirajzolása:
- glColor3d(0.0,0.0,0.0);
- glLineWidth(1);
- glLineStipple(1,0x3F0);
- glBegin(GL_QUADS);
- for(int i = 0; i < ptnum; i++)
- {
- glVertex2d(ctrlpoints[i].x+2,ctrlpoints[i].y+2);
- glVertex2d(ctrlpoints[i].x+2,ctrlpoints[i].y-2);
- glVertex2d(ctrlpoints[i].x-2,ctrlpoints[i].y-2);
- glVertex2d(ctrlpoints[i].x-2,ctrlpoints[i].y+2);
- }
- glEnd();
- glBegin(GL_LINES);
- drawLagrange();
- glEnd();
- glFlush( );
- }
- //Egér mozgára aktiválódik, kurzorpozíció koordinátáit kapja bemenetnek
- void Motion(int x, int y) {
- }
- void MouseFunction(int button, int state, int x,int y)
- {
- //bal gomb lenyomására
- if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
- ctrlpoints[ptnum].x = x;
- ctrlpoints[ptnum].y = y;
- ptnum++;
- }
- //jobb gomb lenyomására/felengedésére (lásd 2.2 feladat)
- if (button == GLUT_RIGHT_BUTTON) {
- }
- //A képernyő újrarajzolása (azaz redraw hívása)
- glutPostRedisplay();
- }
- void Keyboard(unsigned char key, int x, int y) {
- }
- //--------------------------
- // Keret (nem kell módosítani)
- //Inicializálás
- void Init(){
- glViewport(0, 0, wW, wH);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity( );
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity( );
- gluOrtho2D(0.0, wW, wH, 0.0);
- SajatInit();
- }
- //Ablak átméretezésekor a teljes képet skálázza
- void reshape(int w, int h) {
- glViewport(0,0,(GLsizei)w,(GLsizei)h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0.0, wW, wH, 0.0);
- wW=w;
- wH=h;
- }
- int main(int argc, char* argv[])
- {
- wW=400;
- wH=400;
- glutInitWindowSize(wW, wH);
- glutInitWindowPosition(100, 100);
- glutInit(&argc, argv);
- glutInitDisplayMode( GLUT_RGB );
- glutCreateWindow("DrawLine");
- Init();
- glutKeyboardFunc( Keyboard );
- glutDisplayFunc( ReDraw );
- glutMouseFunc(MouseFunction);
- glutMotionFunc(Motion);
- glutReshapeFunc(reshape);
- glutMainLoop();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement