2024年6月13日 星期四

week14 沒上學

 Week14

-------------------------------------------------------------------

week14 

week13-3_File_fclose_fprintf_fscanf 到桌面

改目錄名 week14-1_angle_motion_save

將 angle[20]={}; 修改成 angleX[10]={};

新加 angleY[10]={};

將 Body、Upper、Lower 修改成 glRotatef( angleX[0], 1, 0, 0);

glRotatef( angleY[0], 0, 1, 0);

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

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

//rintf("%.1f ", anglex[i]);

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

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

angleX[angleID] += y - oldY;

angleY[angleID] += x - oldX;

---------------------------------------------------------------

week14-2_alpha_blending

   void timer(int t)

              {

                  printf("你呼叫了 timer(%d)\n", t);

              }

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

              {

                  printf("程式開始執行\n");

                  glutInit(&argc, argv);

                  glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

                  glutCreateWindow("week14-2_alpha_blending");

                  glutDisplayFunc(display);

                  glutIdleFunc(display); ///加入旋轉

                  glutKeyboardFunc(keyboard);

                  glutMouseFunc(mouse);

                  glutMotionFunc(motion);

                  glutTimerFunc(1000, timer, 1);

                  glutTimerFunc(2000, timer, 2);

                  glutTimerFunc(3000, timer, 3);

                  ...

              }

-------------------------------------------------------------

  (1) void timer(int t); ///函式的形狀的宣告

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

                        if(key=='p'){ ///播放

                            glutTimerFunc(0, timer, 0);

                        }

          

                    ///glutTimerFunc( 0, timer, 0);

                    if(key=='r'){ 

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

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

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

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

                          }

                          glutPostRedisplay();

                      }

                      if(key=='s'){ ///存檔

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

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

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

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

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

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

                              }

                              printf("\n");

                              fprintf(fout, "\n");

                      }

修改 timer 讓機器人自己動

                float oldAngleX[10] = {};

                float oldAngleY[10] = {};

                float newAngleX[10] = {};

                float newAngleY[10] = {};

                void timer(int t)

                {

                    glutTimerFunc(50, timer, t+1);

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

                    if(t%20==0){

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

                            oldAngleX[i] = newAngleX[i];

                            oldAngleY[i] = newAngleY[i];

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

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

                        }

                    }

                    float alpha = (t%20 / 20.0);

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

                        angleX[i] = alpha * newAngleX[i] + (1-alpha) * oldAngleX[i];

                        angleY[i] = alpha * newAngleY[i] + (1-alpha) * oldAngleY[i];

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

                    }

                    glutPostRedisplay();

                    printf("你呼叫了 timer(%d)\n", t);

                }

沒有留言:

張貼留言