# 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軸都能控制模型的移動

沒有留言:
張貼留言