2019年5月17日 星期五

學渣的奮鬥史-11

今天凌晨開始下雨還打雷,怕



今天第一節課教的內容是關於使用FILE去開啟檔案

開檔案有分三種模式,分別是"w","r","a"

今天主要教的內容是"w+"

"w",write(寫入)

有"w+","w"兩種

加了+號是代表不僅寫入,還加了update(上傳)

讓程式碼不僅能夠寫入檔案還能在檔案內更新內容

-

主要參考來源是[這個網站]

如果有同學有興趣歡迎去看看

-

接下來來說說看程式碼

原始碼如下

#include <stdio.h>

FILE * fout=NULL; <---宣告FILE的變數

int main()

{

    fout=fopen("filname.txt","w+");<---"檔案名稱","寫入檔案、更新檔案"

    for(int i=0;i<20;i++){

        fprintf(fout,"Hello World\n");<---"更新的內容"

    }

}

-------------------------------------分隔線-------------------------------------------
第二節課(開始倦了)


好想睡

第二節課講的主要是關於如何在glut中讀寫檔案

那既然要做GLUT那就要下載[這個檔案]

程式碼如下

#include <GL/glut.h>

float angle[20];///NOW

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///body
        glColor3f(1,1,1);///white
        glutSolidTeapot( 0.3 );///body

        glPushMatrix();///right Arm
            glTranslatef(0.18, 0, 0);///(3)掛到肩上
            glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
            glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心

            glColor3f(1,0,0);///red
            glutSolidTeapot( 0.2 );///right upper arm
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
}
int oldX;///NOW
void mouse(int button, int state, int x, int y)///NOW
{
    oldX = x;///NOW
}
void motion(int x, int y)///NOW
{
    angle[1] += (x-oldX);///NOW

    oldX = x;///NOW

    display();///NOW
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutInitWindowSize(600,600);///我們可以開很大的視窗

    glutCreateWindow("week 13 motion TRT angle file");

    glutMouseFunc(mouse);///使用刮號內的函式

    glutMotionFunc(motion);///使用刮號內的函式

    glutDisplayFunc(display);

    glutMainLoop();
}

-------------------------------------分隔線-------------------------------------------
第三節課(餓)



第三節課使用了第11週的內容

再加上這次上課新的東西

程式碼如下

#include <stdio.h> ///(0)  ///NOW4
#include <GL/glut.h>
FILE * fout=NULL;///(1) ///NOW4
FILE * fin =NULL;///(1) ///NOW5
float angle[20];///NOW
int angleID=1;///第幾個要轉動的關節 ///NOW3
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///body
        glColor3f(1,1,1);///white
        glutSolidTeapot( 0.3 );///body

        glPushMatrix();///right Arm
            glTranslatef(0.18, 0.15, 0);///(3)掛到肩上
            glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
            glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心

            glColor3f(1,0,0);///red
            glutSolidTeapot( 0.2 );///right upper arm

            glPushMatrix();///NOW2 長出下手臂
                glTranslatef(0.18, 0, 0);///(3)掛到肘上
                glRotatef(angle[2], 0,0,1);///(2)轉動 ///NOW
                glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心

                glColor3f(1,0,0);///red
                glutSolidTeapot( 0.15 );///right lower arm

            glPopMatrix();
        glPopMatrix();

        glPushMatrix();///left Arm
            glTranslatef(-0.18, 0.15, 0);///(3)掛到肩上
            glRotatef(angle[3], 0,0,1);///(2)轉動 ///NOW
            glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心

            glColor3f(1,0,0);///red
            glutSolidTeapot( 0.2 );///left upper arm

            glPushMatrix();///NOW2 長出下手臂
                glTranslatef(-0.18, 0, 0);///(3)掛到肘上
                glRotatef(angle[4], 0,0,1);///(2)轉動 ///NOW
                glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心

                glColor3f(1,0,0);///red
                glutSolidTeapot( 0.15 );///left lower arm

            glPopMatrix();
        glPopMatrix();
    glPopMatrix();



    glPushMatrix( ); ///左邊大腿
            glTranslatef(-0.3, -0.23, 0); ///(3) 掛在身體的左下大腿
            glRotatef(angle[5], 0,0,-1); ///(2) 旋轉
            glTranslatef(-0.15, 0,0); ///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸
            glColor3f(1,0,0); ///紅色的
            glutSolidTeapot( 0.2 ); ///左大腿
        glPushMatrix(); ///NOW2
            glTranslatef(-0.2, 0, 0); ///(3) 掛在身體的左肘///NOW2
            glRotatef(angle[6], 0,0,-1); ///(2) 旋轉///NOW2
            glTranslatef(-0.15, 0,0); ///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW
            glColor3f(1,0,0); ///紅色的///NOW2
            glutSolidTeapot( 0.15 ); ///左下手臂///NOW2
        glPopMatrix( );
    glPopMatrix( );


    glPushMatrix( ); ///右邊大腿
        glTranslatef(0.3, -0.23, 0); ///(3) 掛在身體的右肩
        glRotatef(angle[7], 0,0,1); ///(2) 旋轉
        glTranslatef(0.15, 0,0); ///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0); ///紅色的
        glutSolidTeapot( 0.2 ); ///右大腿

        glPushMatrix( ); ///NOW2
            glTranslatef(0.2, 0, 0); ///(3) 掛在身體的右肘///NOW2
            glRotatef(angle[8], 0,0,1); ///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0); ///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0); ///紅色的 ///NOW2
            glutSolidTeapot( 0.15 ); ///右下小腿///NOW2
        glPopMatrix( ); ///NOW2
    glPopMatrix( );
    glutSwapBuffers( );
     ///angle++; ///NOW
}
int oldX, oldY;///NOW5
void motion(int x, int y)///NOW3 用滑鼠mouse來控制angle
{
    angle[angleID] += (x-oldX);///NOW ///NOW3
    oldX = x;///NOW
    if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4
    for(int i=0; i<20; i++){///NOW4
        printf( "%.1f ", angle[i]);///NOW4
        fprintf( fout, "%.1f ", angle[i]);///NOW4
    }
    printf("\n");///NOW4
    fprintf(fout, "\n");///NOW4
    display();///NOW
}
void mouse(int button, int state, int x, int y)
{
   oldX = x;///NOW
}
void keyboard(unsigned char key, int x, int y)///NOW6 配合鍵盤
{
    if(key=='1')angleID=1;
    if(key=='2')angleID=2;
    if(key=='3')angleID=3;
    if(key=='4')angleID=4;
    if(key=='5')angleID=5;
    if(key=='6')angleID=6;
    if(key=='7')angleID=7;
    if(key=='8')angleID=8;
    if(key=='w' || key=='W'){///NOW4 小寫的 w
        if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4
        for(int i=0; i<20; i++){///NOW4
            printf( "%.1f ", angle[i]);///NOW4
            fprintf( fout, "%.1f ", angle[i]);///NOW4
        }
        printf("\n");///NOW4
        fprintf(fout, "\n");///NOW4
    }
    if(key=='r'){///NOW5
        if(fin==NULL) fin = fopen("motion.txt", "r");///NOW5
        for(int i=0; i<20;i++){///NOW5
            fscanf(fin, "%f", &angle[i]);///NOW5
        }///NOW5
    }
    glutPostRedisplay();///和 display()很像,但更好 ///NOW5

}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutInitWindowSize(600,600);
    glutCreateWindow("week13 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMouseFunc(mouse);
    glutKeyboardFunc(keyboard);
    glutMainLoop( );
}



-------------------------------------分隔線-------------------------------------------
ㄅㄅ


沒有留言:

張貼留言