2024年5月23日 星期四

BK Week14

# week14


## week14-1_alpha_interpolation_angle_timer

0. 下載 freeglut 至桌面, 並解壓縮, 更改 lib 中的檔名

1. 安裝 OpenCV

2. 重開 CodeBlocks, 改Setting - Compiler

3. Setting-Complier 要加入 OpenCV 相關的3個設定

    a. compiler 的 include 要加入 C:\OpenCV2.1\include

    b. linker 的 lib 要加入 C:\OpenCV2.1\lib

    c. linker 設定, 要加入 cv210 cxcore210 highgui210

4. 再把 GitHub 的程式倉庫下載下來

5. 更改 week13-2_FILE_fopen_fprintf_fscanf 目錄名

    為 week14-1_alpha_interpolation_angle_timer

6. 更改 .cbp 檔的檔名為 week14-1_alpha_interpolation_angle_timer

7. 再用 Notepad++ 開啟 .cbp檔, 改Title為 week14-1_alpha_interpolation_angle_timer

8. 開啟 week14-1_alpha_interpolation_angle_timer


TODO: 開啟 Excel

alpha 公式: 新的 * alpha + 舊的 * (1 - alpha)



1. 把原來motion裡存檔的程式碼剪下,貼進 keyboard

```cpp

    void keyboard (unsigned char key, int x, int y){

        ......

        glutPostRedisplay();}

         else if(key='s'){///貼在這裡

            if(fout==NULL) fout = fopen("angle.txt", "w+");

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

                printf("%.1f ", angle[i]);

                fprintf(fout, "%.1f ", angle[i]);

            }

            printf("\n");

            fprintf(fout, "\n");

        }

    }

```

2. 加上這禮拜新加的 timer函式

```cpp

    void timer(int t){

       glutTimerFunc(20, timer, t+1);

        printf("現在起床:%d\n",t);

    }


    int main(int argc, char*argv[]) {

        ......

        glutKeyboardFunc(keyboard);

        glutTimerFunc(0, timer, 0); ///week14-1新加的

    }

```

3. 把剛剛第2點的部分註解掉, 加上下面橘色部分程式碼

```cpp

    float oldAngle[20] = {}, newAngle[20] = {};

    void timer(int  t){

    glutTimerFunc(50, timer, t+1);

    if(t%20==0){

        if(fin==NULL) fin = fopen("angle.txt","r");

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

            oldAngle[i] = newAngle[i];

            fscanf(fin, "%f", & newAngle[i]);

        }

    }

    float alpha = (t%20) / 20.0;

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

        angle[i] = newAngle[i]*alpha + oldAngle[i]*(1-alpha);

    }

        glutPostRedisplay();

    }

```


## week14-2_angleX_angleY_10

1. 更改 week14-1_alpha_interpolation_angle_timer 目錄名

為 week14-2_angleX_angleY_10

2. 更改 .cbp 檔的檔名為 week14-2_angleX_angleY_10

3. 再用 Notepad++ 開啟 .cbp檔, 改Title為 week14-2_angleX_angleY_10

4. 開啟 week14-2_angleX_angleY_10

5. 改程式碼

    a. if(key=='0') angleID = 0; 做到 if(key=='9') angleID = 9;

    b. 把 float angle[20]={}; 改成 float angleX[10] = {},angleY[10] = {};

    c. 把angle [angleID] += y - oldY; 

    改成 angleX [angleID] += y - oldY; angleY [angleID] += x - oldX;

```cpp

    float angleX[10] = {},angleY[10] = {};

    int angleID = 0; 

    ......

    void motion(int x, int y){

        angleX [angleID] += y - oldY;

        angleY [angleID] += x - oldX; 

    ......

}

```

6. 再更改其他東西後,可以讓X軸, Y軸都能控制模型的移動

沒有留言:

張貼留言