2012-02-14 6 views
1

制限事項:ユーザ指定の値を使ってOpenGLを使ってプロットする/値を求める方法は?

  • 私は プログラム内の関数を使用する必要がありますフレームワーク
  • を変更することはできません(私の最愛の先生が自分以外で与えられた機能を使用して、私たちが好きではありません)

    #include<OpenGL/gl.h> 
    #include<OpenGL/glu.h> 
    #include<GLUT/glut.h> 
    #include <stdlib.h> 
    #include <math.h> 
    
    int lb=-30, ub=30; 
    double cpoints=9999999; 
    
    void init (void) 
    { 
        glClearColor(1,1,1,1); 
        glMatrixMode(GL_PROJECTION); 
        gluOrtho2D(-30,30,-30,30); 
    } 
    
    void graphfunct2D(void) 
    { 
        double dx, xi, yi; 
        dx = (ub-lb)*1.0/cpoints; 
        glColor3f(0,0,0); 
        glClear(GL_COLOR_BUFFER_BIT); 
        xi = lb; 
        yi = xi*sin(xi); 
        int i; 
        for (i=0; i<=cpoints;i++) 
        { 
         glBegin(GL_POINTS); 
         glVertex2i(xi,yi); 
         glEnd(); 
         xi = xi+dx; 
         yi = xi*sin(xi); 
        } 
        glFlush(); 
    } 
    
    int main (int argc, char** argv) 
    { 
        glutInit(&argc, argv); 
        /*printf("lower bound: "); 
        scanf(" %d",&lb); 
        printf("upper bound:"); 
        scanf(" %d",&ub); 
        printf("Give me the number of points to plot (int)"); 
        scanf(" %d",&cpoints);*/ 
        glutInitWindowSize(500,500); 
        glutCreateWindow("Graph function in 2D"); 
        init(); 
        glutDisplayFunc(graphfunct2D); 
        glutMainLoop(); 
    } 
    
    (私はそれにしたいと同じくらい滑らかでない)

は、ここでのコードだと、それだけでこのように動作します

私はユーザーに上限と下限を提供し、それらの2つに基づいて関数をプロットできるようにしたいが、入力をコメント解除してプログラムを実行すると、何も表示されない(それらを要求せず、私はこのような何か試してみてください

+1

あなたは何を意味するか明確にすることはできますが上限と下限を入力するプロンプトが表示されない、またはユーザーが入力した後に結果が表示されないことを意味しますか? – user1118321

+0

@ user1118321私はプログラムが始まる(それは開始のようにドックにジャンプし続けますが、実際には起動しない/ウィンドウを表示する/ジャンプを停止する)これはコンパイラから実行すると発生します。私はいくつかの警告が表示されます: –

+0

'func2d.h:関数 'main': func2d.h:49:警告:互換性のない暗黙の宣言組み込み関数 'printf' func2d.h:50:警告:組み込み関数 'scanf'の暗黙の宣言がありません func2d.h:54:警告:形式 '%d'は 'int *' 2には 'double *'タイプのタイプがあります。 –

答えて

0

)それはうまく動作します定義された:「?それは何も表示されない」

#include <GL/glut.h> 
#include <stdlib.h> 
#include <math.h> 

double lb=-30, ub=30; 
unsigned int cpoints=2048; 
void graphfunct2D(void) 
{ 
    double dx, xi, yi; 
    int i; 
    dx = (ub-lb)/cpoints; 

    glClearColor(1, 1, 1, 1); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-30, 30, -30, 30, -1, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glColor3ub(0,0,0); 
    glBegin(GL_LINE_STRIP); 
    for(i = 0; i <= cpoints; i++) 
    { 
     xi = (i * dx) + lb; 
     yi = xi * sin(xi); 
     glVertex2f(xi, yi); 
    } 
    glEnd(); 
    glutSwapBuffers(); 
} 

int main (int argc, char** argv) 
{ 
    printf("lower bound: "); 
    scanf(" %d",&lb); 
    printf("upper bound:"); 
    scanf(" %d",&ub); 
    printf("Give me the number of points to plot (int)"); 
    scanf(" %d",&cpoints); 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); 
    glutInitWindowSize(500,500); 
    glutCreateWindow("Graph function in 2D"); 
    glutDisplayFunc(graphfunct2D); 
    glutMainLoop(); 
} 
+0

ありがとう!これは私がターミナルから走ったときに働いた:D私はxcodeからのスキャンに問題があるかもしれないと思うだろうが、あまりにも後でそれを調べなければならないだろうが、今のところ、LoadIdentity()関数?再び –

+0

['glLoadIdentity()'](http://www.opengl.org/sdk/docs/man/xhtml/glLoadIdentity.xml)は、現在の行列スタックの上端を4x4 [単位行列](http ://en.wikipedia.org/wiki/Identity_matrix)。端末以外の使用方法については、まだ使用していない場合は[ア​​プリケーションバンドル](http://en.wikipedia.org/wiki/Application_bundle#Mac_OS_X_application_bundles)を参照してください。 – genpfault

+0

ありがとう、私はそれらのバンドルのものを確かめてみるつもりです –

関連する問題