2020年6月9日 星期二

Week16 /*附程式碼

用 Excel來看內插 alpha*新的+(1-alpha)*舊的

複習Week14 
做好動作,按's'存下
重新打開
按'r'可以讀存好的動作進來
開始修改程式碼:
在timer()裡頭,利用alpha內插,讓新舊角度可以順順的內插出值,並更新畫面

int oldAngle[10];
int newAngle[10];
void timer(int t)///TODO5: 用timer自動readAll()再更新
{
    glutTimerFunc(20, timer, t+1);///TODO5: 再註冊下一個時間點 20ms 之後
    if(t==0){///第一次進入,先讀新的
        if(fin==NULL) fin=fopen("motion.txt","r");
        for(int i=0;i<10;i++){
            fscanf(fin,"%d",&newAngle[i]);
        }
    }
    float alpha = (t%10)/10.0;///讓alpha介於0.0-0.1之間
    if(t%10==0){///每次進入橙色區域,就再做一次調整
        for(int i=0;i<10;i++){
            oldAngle[i] = newAngle[i];
            fscanf(fin,"%d",&newAngle[i]);
            printf("%d ",newAngle[i]);
        }
    }
    for(int i=0;i<10;i++){
        angle[i]= alpha*newAngle[i] + (1-alpha)*oldAngle[i];///內插公式
    }
    glutPostRedisplay();
}

參考
把關節數目變2倍時,要修改對應的陣列angle及oldAngle、newAngle還有for迴圈,讓它可以移動加旋轉  程式碼

沒有留言:

張貼留言