2025年5月1日 星期四

12750245_黃品燕_week11

 課堂作業1:

//week11_postman_saveString_loadStrings

//修改至week10_6_postman_many_angle_ID_saveStrings_loadStrings

PImage postman,head,body,uparm1,hand1,uparm2,hand2;

float[]angle=new float[20];

int ID = 0;

void mouseDragged(){

  angle[ID]+=mouseX-pmouseX;

}

void keyPressed(){

  if(key=='1')ID=1;

  if(key=='2')ID=2;

  if(key=='3')ID=3;

  if(key=='4')ID=4;

  if(key=='5')ID=5;

  if(key=='6')ID=6;

  if(key=='0')ID=0;

  

  if(key=='s'){//從這裡開始

    String now="";

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

      now+=angle[i]+" ";

    }

    lines.add(now);//把現在的這行,加到lines裡

    String[]arr=new String[lines.size()];

    lines.toArray(arr);

    saveStrings("angle.txt",arr);

  }

  if(key=='r'){//replay

    if(R==0){

      String [] file=loadStrings("angles.txt");

      if(file!=null){

        for(int i=0;i<file.length;i++){

          lines.add(file[i]);//加到lines資料結構裡

        }

      }

    }

    if(R<lines.size()){

      float[]now=float(split(lines.get(R),' '));

      for(int i=0;i<20;i++)angle[i]=now[i];

      R=(R+1)%lines.size();

    }

  }

}

int R=0;

String [] another;

ArrayList<String> lines=new ArrayList<String>();//放移動的 結果

void setup(){

  size(560,560);

  postman = loadImage("postman.png");

  head = loadImage("head.png");

  body = loadImage("body.png");

  uparm1 = loadImage("uparm1.png");

  hand1 = loadImage("hand1.png");

  uparm2 = loadImage("uparm2.png");

  hand2 = loadImage("hand2.png");

}

void draw(){

  background(#FFFFF2);

  image(postman,0,0);//基礎的郵差先生(全身)

  fill(255,0,255,128);//半透明的紫色

  rect(0,0,560,560);//蓋上去

  pushMatrix();

    translate(+185,+261);

    rotate(radians(angle[1]));

    translate(-185,-261);//把頭的旋轉中心

    image(uparm1,0,0);//在畫我們的頭

    pushMatrix();

      translate(+116,+265);

      rotate(radians(angle[2]));

      translate(-116,-265);

      image(hand1,0,0);

    popMatrix();

  popMatrix();

  

  pushMatrix();

    translate(+290,+262);

    rotate(radians(angle[3]));

    translate(-290,-262);

    image(uparm2,0,0);

    pushMatrix();

      translate(+357,+259);

      rotate(radians(angle[4]));

      translate(-357,-259);

      image(hand2,0,0);

    popMatrix();

  popMatrix();

  

  pushMatrix();

    translate(+236,+231);//再放回去正確的位置

    rotate(radians(angle[0]));

    translate(-236,-231);

    image(head,0,0);

  popMatrix();

  image(body,0,0);//在畫身體

}

課堂作業2:
//week11_2_postman_alpha_interpolation
//改至week11_1postman_saveString_loadStrings
//修改至week10_6_postman_many_angle_ID_saveStrings_loadStrings
PImage postman,head,body,uparm1,hand1,uparm2,hand2;
float[]angle=new float[20];
int ID = 0;
void mouseDragged(){
  angle[ID]+=mouseX-pmouseX;
}
void keyPressed(){
  if(key=='1')ID=1;
  if(key=='2')ID=2;
  if(key=='3')ID=3;
  if(key=='4')ID=4;
  if(key=='5')ID=5;
  if(key=='6')ID=6;
  if(key=='0')ID=0;
  
  if(key=='s'){//從這裡開始
    String now="";
    for(int i=0;i<20;i++){
      now+=angle[i]+" ";
    }
    lines.add(now);//把現在的這行,加到lines裡
    String[]arr=new String[lines.size()];
    lines.toArray(arr);
    saveStrings("angles.txt",arr);
  }
  if(key=='r'){//replay
    if(R==0){
      String [] file=loadStrings("angles.txt");
      if(file!=null){
        for(int i=0;i<file.length;i++){
          lines.add(file[i]);//加到lines資料結構裡
        }
      }
    }
    if(R<lines.size()){
      float[]now=float(split(lines.get(R),' '));
      for(int i=0;i<20;i++)angle[i]=now[i];
      R=(R+1)%lines.size();
    }
  }
  if(key=='p'){
    int R2=(R+1)%lines.size();
    float[]oldAngle=float(split(lines.get(R),' '));
    float[]newAngle=float(split(lines.get(R2),' '));
    float alpha=(frameCount%30)/30.0;
    for(int i=0;i<20;i++)angle[i]=oldAngle[i]*(1-alpha)+newAngle[i]*alpha;
  }
}
int R=0;
String [] another;
ArrayList<String> lines=new ArrayList<String>();//放移動的 結果
void setup(){
  size(560,560);
  postman = loadImage("postman.png");
  head = loadImage("head.png");
  body = loadImage("body.png");
  uparm1 = loadImage("uparm1.png");
  hand1 = loadImage("hand1.png");
  uparm2 = loadImage("uparm2.png");
  hand2 = loadImage("hand2.png");
}
void draw(){
  background(#FFFFF2);
  image(postman,0,0);//基礎的郵差先生(全身)
  fill(255,0,255,128);//半透明的紫色
  rect(0,0,560,560);//蓋上去
  pushMatrix();
    translate(+185,+261);
    rotate(radians(angle[1]));
    translate(-185,-261);//把頭的旋轉中心
    image(uparm1,0,0);//在畫我們的頭
    pushMatrix();
      translate(+116,+265);
      rotate(radians(angle[2]));
      translate(-116,-265);
      image(hand1,0,0);
    popMatrix();
  popMatrix();
  
  pushMatrix();
    translate(+290,+262);
    rotate(radians(angle[3]));
    translate(-290,-262);
    image(uparm2,0,0);
    pushMatrix();
      translate(+357,+259);
      rotate(radians(angle[4]));
      translate(-357,-259);
      image(hand2,0,0);
    popMatrix();
  popMatrix();
  
  pushMatrix();
    translate(+236,+231);//再放回去正確的位置
    rotate(radians(angle[0]));
    translate(-236,-231);
    image(head,0,0);
  popMatrix();
  image(body,0,0);//在畫身體
}


課堂作業2b:
//week11_2_postman_alpha_interpolation
//改至week11_1postman_saveString_loadStrings
//修改至week10_6_postman_many_angle_ID_saveStrings_loadStrings
PImage postman,head,body,uparm1,hand1,uparm2,hand2;
float[]angle=new float[20];
int ID = 0;
void mouseDragged(){
  angle[ID]+=mouseX-pmouseX;
}
void keyPressed(){
  if(key=='1')ID=1;
  if(key=='2')ID=2;
  if(key=='3')ID=3;
  if(key=='4')ID=4;
  if(key=='5')ID=5;
  if(key=='6')ID=6;
  if(key=='0')ID=0;
  
  if(key=='s'){//從這裡開始
    String now="";
    for(int i=0;i<20;i++){
      now+=angle[i]+" ";
    }
    lines.add(now);//把現在的這行,加到lines裡
    String[]arr=new String[lines.size()];
    lines.toArray(arr);
    saveStrings("angles.txt",arr);
  }
  if(key=='r'){//replay
    if(R==0){
      String [] file=loadStrings("angles.txt");
      if(file!=null){
        for(int i=0;i<file.length;i++){
          lines.add(file[i]);//加到lines資料結構裡
        }
      }
    }
    if(R<lines.size()){
      float[]now=float(split(lines.get(R),' '));
      for(int i=0;i<20;i++)angle[i]=now[i];
      R=(R+1)%lines.size();
    }
  }
  //if(key=='p'){
  //  float alpha=(frameCount%30)/30.0;
  //  if(alpha==0.0)R=(R+1)%lines.size();
  //  int R2=(R+1)%lines.size();
  //  float[]oldAngle=float(split(lines.get(R),' '));
  //  float[]newAngle=float(split(lines.get(R2),' '));
  //  for(int i=0;i<20;i++)angle[i]=oldAngle[i]*(1-alpha)+newAngle[i]*alpha;
  //}
}
int R=0;
String [] another;
ArrayList<String> lines=new ArrayList<String>();//放移動的 結果
void setup(){
  size(560,560);
  postman = loadImage("postman.png");
  head = loadImage("head.png");
  body = loadImage("body.png");
  uparm1 = loadImage("uparm1.png");
  hand1 = loadImage("hand1.png");
  uparm2 = loadImage("uparm2.png");
  hand2 = loadImage("hand2.png");
}
void myInterpolate(){
  if(lines.size()>0){
    float alpha=(frameCount%30)/30.0;
    if(alpha==0.0)R=(R+1)%lines.size();
    int R2=(R+1)%lines.size();
    float[]oldAngle=float(split(lines.get(R),' '));
    float[]newAngle=float(split(lines.get(R2),' '));
    for(int i=0;i<20;i++)angle[i]=oldAngle[i]*(1-alpha)+newAngle[i]*alpha;
  }
}
void draw(){
  myInterpolate();
  background(#FFFFF2);
  image(postman,0,0);//基礎的郵差先生(全身)
  fill(255,0,255,128);//半透明的紫色
  rect(0,0,560,560);//蓋上去
  pushMatrix();
    translate(+185,+261);
    rotate(radians(angle[1]));
    translate(-185,-261);//把頭的旋轉中心
    image(uparm1,0,0);//在畫我們的頭
    pushMatrix();
      translate(+116,+265);
      rotate(radians(angle[2]));
      translate(-116,-265);
      image(hand1,0,0);
    popMatrix();
  popMatrix();
  
  pushMatrix();
    translate(+290,+262);
    rotate(radians(angle[3]));
    translate(-290,-262);
    image(uparm2,0,0);
    pushMatrix();
      translate(+357,+259);
      rotate(radians(angle[4]));
      translate(-357,-259);
      image(hand2,0,0);
    popMatrix();
  popMatrix();
  
  pushMatrix();
    translate(+236,+231);//再放回去正確的位置
    rotate(radians(angle[0]));
    translate(-236,-231);
    image(head,0,0);
  popMatrix();
  image(body,0,0);//在畫身體
}


課堂作業3:
//week11_3_postman_again
//重新來一次,讓程式的架構變更清楚
PImage postman,head,body,uparm1,hand1,uparm2,hand2,foot1,foot2;
void setup(){
  size(570,570);
  postman=loadImage("postman.png");
  head=loadImage("head.png");
  body=loadImage("body.png");
  uparm1=loadImage("uparm1.png");
  uparm2=loadImage("uparm2.png");
  hand1=loadImage("hand1.png");
  hand2=loadImage("hand2.png");
  foot1=loadImage("foot1.png");
  foot2=loadImage("foot2.png");
}
float[]angleX=new float[10];
float[]angleY=new float[10];
int ID=0;
ArrayList<String>lines=new ArrayList<String>();
void keyPressed(){
  if(key=='s'){
    String now="";
    for(int i=0;i<10;i++){
      now += angleX[i]+" ";
      now += angleY[i]+" ";
    }
    lines.add(now);//把現在的這行,加到lines裡
    String[]arr=new String[lines.size()];
    lines.toArray(arr);
    saveStrings("angles.txt",arr);
    println("現在存檔:"+now);
  }
  if(key=='r'){
    String[]file=loadStrings("angles.txt");
    if(file!=null){
      for(int i=0;i<file.length;i++){
        lines.add(file[i]);
        println("現在讀檔:"+file[i]);
      }
    }
  }
  if(key=='p')playing=!playing;
  
  if(key=='1')ID=1;
  if(key=='2')ID=2;
  if(key=='3')ID=3;
  if(key=='4')ID=4;
  if(key=='5')ID=5;
  if(key=='6')ID=6;
  if(key=='0')ID=0;
}
boolean playing=false;
void mouseDragged(){
  angleX[ID]+=mouseX=pmouseX;
  angleY[ID]+=mouseY-pmouseY;
}
int R=0;
void myInterpolate(){
  if(lines.size()>=2){
    float alpha=(frameCount%30)/30.0;
    if(alpha==0.0)R=(R+1)%lines.size();
    int R2=(R+1)%lines.size();
    float[]oldAngle=float(split(lines.get(R),' '));
    float[]newAngle=float(split(lines.get(R2),' '));
    for(int i=0;i<10;i++){
      angleX[i]=oldAngle[i*2+0]*(1-alpha)+newAngle[i*2+0]*alpha;
      angleY[i]=oldAngle[i*2+1]*(1-alpha)+newAngle[i*2+0]*alpha;
    }
  }
}
void draw(){
  background(#FFFFF2);
  image(body,0,0);
  
  pushMatrix();
    translate(+236,+231);
    rotate(radians(angleX[0]));
    translate(-236, -231);
    image(head,0,0);
  popMatrix();
  
  pushMatrix();
    translate(220,375);
    rotate(radians(angleX[5]));
    translate(-220,-375);
    image(foot2,0,0);
  popMatrix();
  
  pushMatrix();
    translate(260,372);
    rotate(radians(angleY[6]));
    translate(-260,-372);
    image(foot2,0,0);
  popMatrix();
  
  pushMatrix();
    translate(+185,+261);
    rotate(radians(angleX[1]));
    translate(-185,-261);//把頭的旋轉中心
    image(uparm1,0,0);//在畫我們的頭
    pushMatrix();
      translate(+116,+265);
      rotate(radians(angleX[2]));
      translate(-116,-265);
      image(hand1,0,0);
    popMatrix();
  popMatrix();
  
   pushMatrix();
    translate(+290,+262);
    rotate(radians(angleX[3]));
    translate(-290,-262);
    image(uparm2,0,0);
    pushMatrix();
      translate(+357,+259);
      rotate(radians(angleX[4]));
      translate(-357,-259);
      image(hand2,0,0);
    popMatrix();
  popMatrix();
}



沒有留言:

張貼留言