2020年6月23日 星期二

week18


將data裡的檔案拉到processing
將gundam.pde裡的程式碼複製進去


PShape gundam;
void setup(){
   size(500,500,P3D);
   gundam = loadShape("Gundam.obj");
}
void draw(){
   shape(gundam);
}




PShape gundam;
void setup(){
   size(500,500,P3D);
   gundam = loadShape("Gundam.obj");
}
void draw(){
   scale(10,10,10); ///scale可調整模型的縮放比例
   shape(gundam);
}

PShape gundam;
void setup(){
  size(500,500,P3D);
  gundam = loadShape("Gundam.obj");
}
void draw(){
  translate(250,0,0); ///3D操作translate
  scale(10,10,10);
  shape(gundam);
}

在3D操作中移動、旋轉、縮放 程式的順序不同,結果會差很多
PShape gundam;
void setup(){
  size(500,500,P3D);
  gundam = loadShape("Gundam.obj");
}
void draw(){
  background(128); ///清背景,才不會有陰影
  translate(250,400,0);
  scale(10,-10,10); ///放大10倍,但y變成負的
  rotateY(radians(frameCount)); ///先對Y軸旋轉
  shape(gundam);
}




PImage img;
PShape globe;
void setup(){
   size(300,300,P3D); ///原本寬度跟高度為300
   img = loadImage("earth.jpg");
   globe = createShape(SPHERE,100);
   globe.setStroke(false);
   globe.setTexture(img);
}
void draw(){
   background(128);
   noStroke();
   translate(width/2,height/2); /// 除2(要移到中間)
   rotateY(radians(frameCount));
   shape(globe);
}

PImage img;
void setup(){
   size(300,300,P3D);
   img = loadImage("earth.jpg");
}
void draw(){
   image(img,0,0); 
}

PImage img;
PShape globe; ///現在變3行,PShae處理
void setup(){
   size(300,300,P3D);
   img = loadImage("earth.jpg");
   globe = createShape(SPHERE,100); ///功能就可以比較強大
}
void draw(){
   image(img,0,0);
   shape(globe); ///因為它變成可以改變的shape
}



PImage img;
PShape globe;
void setup(){
   size(300,300,P3D);
   img = loadImage("earth.jpg");
   globe = createShape(SPHERE,100);
   globe.setTexture(img); ///可以設定貼圖
}
void draw(){

   shape(globe); ///變成PShape比較厲害
}

PImage img;
PShape globe;
void setup(){
   size(300,300,P3D);
   img = loadImage("earth.jpg");
   globe = createShape(SPHERE,100);
   globe.setTexture(img);
}
void draw(){
   translate(300/2,300/2);
   shape(globe);
}


PImage img;
PShape globe;
void setup(){
   size(300,300,P3D);
   img = loadImage("earth.jpg");
   globe = createShape(SPHERE,100);
   globe.setStroke(false);
   globe.setTexture(img);
}
void draw(){
   translate(width/2,height/2);
   shape(globe);
}

wk14


用Processing讓程式有聲音

先到Setch --> Import Library--> Add Library


下載 Minim




並到Example中找到 playAFile

之後就可以撥放聲音了



import ddf.minim.*;///使用外掛
Minim minim;///物件minim
AudioPlayer player;///物件 player
PImage imgBird;
void setup(){
  size(500,400);
  imgBird=loadImage("bird.png");//圖檔如果沒有放好,會當掉 pointer
  imageMode(CENTER);//以正中心,當座標
  minim = new Minim(this);
  player = minim.loadFile("song.mp3");
  player.play();///播放
}
float birdX=100, birdY=300, oldX, oldY, vx=0, vy=0;//之前的鳥在哪裡
boolean bMoving=false;//if(判斷) ex. if(bMoving)...
void draw(){
  background(255);//清背景
  image(imgBird, birdX,birdY,100,100);//不能一直跟著mouse動,改用birdX,birdY
  if(bMoving) line(birdX,birdY, oldX,oldY);//有按到,才能動它
  birdX+=vx; birdY+=vy;//鳥要照速度去飛!!!
  if(birdX>450 || birdX<50) vx = -vx*0.95;//撞到邊界,會改變方向,相反的方向
  if(birdY>350 || birdY<50) vy = -vy*0.95;//撞到邊界,會改變方向,相反的方向
}
void mouseReleased(){
  if(bMoving){
    bMoving=false;//放開時,就不能動了
    vx=(oldX-mouseX)/10; vy=(oldY-mouseY)/10;// 0.1倍
  }
}
void mousePressed(){//按下去,才會開始動
  if( dist(mouseX,mouseY, birdX,birdY)<50){
    oldX=birdX; oldY=birdY;
    bMoving=true;///按下去時,如果有按到,才能動它
  }
}
void mouseDragged(){//按下去,才會開始動
  if(bMoving) {//有按到,才能動它
    birdX=mouseX; birdY=mouseY;
  }
}

2020年6月22日 星期一

黃姓小女紙寫程式~~Week18

Week 18

本日前提要緊:

今天終於是最後一堂課了,爽啦,雖然我抱著很大的怨念來上課QQ,好想在家睡覺阿!!
但還是只能認分的來寫程式,首先今天要先寫出新的東西鋼彈勇士的模型,是大二下才會看到的,現在就讓我們來看看吧。

步驟1:

程式碼:
             PShape gundam;  ///宣告3D模型的,跟前面交的Image宣告差不多
             void setup( ){
                 size (500,500,P3D); ///一樣是用在3D模型的
                 gundam = loadShape("Gundam.obj");
             }
             void draw( ){
                 shape(gundam); 
             }
解讀:
記得把照片檔案拖曳進來喔~
注意!!!!!!!!!! 
檔名什麼的都不可以寫錯,會有程式的問題,這時跟著以下這張圖~~~

步驟2:

程式碼:
              PShape gundam;
              void setup( ){
                  size (500,500,P3D);
                  gundam = loadShape("Gundam.obj");
              }
              void draw( ){
                  scale(10,10,10); ///可調大模型的縮放比例(x,y,z)
                 shape(gundam); 
              }
解讀: 
3D模型基本需要用到的三個東西: scale是縮放 translate縮放 rotate旋轉
為什麼沒有辦法置中??? 因為MAYA在建模型時,放在中間,所以圖一開始的中心在(0,0)

步驟3:


程式碼:
              PShape gundam;
              void setup( ){
                  size (500,500,P3D);
                  gundam = loadShape("Gundam.obj");
               }
               void draw( ){
                   translate(250,0,0);    ///用translate 移動250,是圖的一半
                   scale(10,10,10);
                   shape(gundam); 
               }

步驟4:

程式碼:
              PShape gundam;
              void setup( ){
                  size (500,500,P3D);
                  gundam = loadShape("Gundam.obj");
              }
              void draw( ){
                  rotate(1);    ///旋轉一弧度 單位是radians( )
                  translate(250,0,0);
                  scale(10,10,10);
                  shape(gundam); 
              }
解釋:
圖左上角的星星是鋼彈的中心(0,0)

步驟5:

程式碼:
             PShape gundam;
             void setup( ){
                 size (500,500,P3D);
                 gundam = loadShape("Gundam.obj");
             }
             void draw( ){
                 background(128);    ///清背景才度會有殘影出現
                 translate(250,400,0);
                 scale(10,-10,10); //放大10被<但是y變負的
                 rotateY(radians(frameCount)); ///對Y軸旋轉
                shape(gundam); 
             }
解釋:
在3D操作中移動 旋轉 縮放 程式的順序不同,結果會差很多

這樣鋼彈勇士模型就完成了!
接下來進入本日的第二個模型 "地球"

先來看一遍完整版的了解一下在幹嘛吧!

程式碼:
              PImage img;
              PShape globe;
              void setup( ){
                  size (300,300,P3D);
                  img = loadImage("earth.jpg");
                  globe=createShape(SPHERE,100);
                  globe.setStroke(false);
                  globe.setTexture(img);
             }
             void draw( ){
                 background(128);
                 noStroke( );
                 translate(width/2,height/2);
                 rotate(radians(frameCount));
                 shape(globe); 
            }
接下來就從頭手做一遍吧~~~

步驟一:

程式碼:
             PImage img;
             void setup( ){
                 size(300,300,P3D);
                 img = loadImage("earth.jpg");
             }
             void draw( ){
                 image(img,0,0);
             }
解釋:
把圖檔匯進來是很重要的,跟上面直接匯模型不太一樣,要注意!!!

步驟二:

程式碼:
              PImage img;
              PShape globe;
              void setup( ){
                  size(300,300,P3D);
                  img = loadImage("earth.jpg");
                  globe=createShape(SPHERE,100);
              }
              void draw( ){
                  image(img,0,0);
                  ///sphere(100); ///用這一行是指畫出一個圓球,但後來要改它,所以不用
                  shape(globe);
              }
解釋:
雖然只有sphere(100)很簡單,但是因為後續的問題,所以要該城多三行,功能就會比較強大,先用PShare處理,只因為它可以改變最後一行的shape

步驟三:

程式碼:
              PImage img;
              PShape globe;
              void setup( ){
                  size(300,300,P3D);
                  img = loadImage("earth.jpg");
                  globe=createShape(SPHERE,100);
                  globe.setTexture(img);   ///所以可以設定貼圖
             }
             void draw( ){
               //image(img,0,0);
               //sphere(100);
               shape(globe);  ///變成shape比較厲害
             }

步驟四:

程式碼:
              PImage img;
              PShape globe;
              void setup( ){
                  size(300,300,P3D);
                  img = loadImage("earth.jpg");
                  globe=createShape(SPHERE,100);
                  globe.setTexture(img);
             }
            void draw( ){
                //image(img,0,0);
                //sphere(100);
                translate(width/2,height/2);   ///因為要固定它的大小,不能用(300/2,300/2)
                shape(globe);
            }
本學期最後一堂,結束!!下課!!
喜歡可以訂閱加關注喔,開啟小鈴鐺
但應該不會在更新吧哈哈~~

拾參

1.練習會考

進階題:函數反序排列數字


#include <stdio.h>
int main()
{
int a,b=0,sum=0;
scanf("%d",&a);
while(a)
{
b=a%10;
sum=(b+sum)*10;
a=a/10;
}
printf("%d\n",sum/10);
}

進階題:2進位轉10進位
#include <stdio.h>
int main( )
{
  int n;
  scanf("%d",&n);
  int n1=n%10;
  int n2=(n/10)%10;
  int n3=(n/100)%10;
  int n4=(n/1000)%10;
  int ans=n1*1+n2*2+n3*4+n4*8;
  printf("%d\n",ans);
}

2.憤怒鳥
PImage bird,slingshot_0,slingshot_1;
void setup()
{
   size(1680,720);
   bird = loadImage("bird.png");
   slingshot_0 = loadImage("slingshot_0.png");
   slingshot_1 = loadImage("slingshot_1.png");
   imageMode(CENTER);
}

float birdX = 195,birdY = 590,oldX,oldY,vx = 0,vy = 0,SSX = 200,SSY = 650;
boolean bMoving = false,bDropping = false;

void draw()
{
  background(255);
  if(bMoving) line(mouseX-15,mouseY+15,oldX+20,oldY+5);
  image(slingshot_0,SSX,SSY,60,168);
  image(bird,birdX,birdY,50,50);
  image(slingshot_1,SSX,SSY,60,168);
  if(bMoving) line(mouseX-15,mouseY+15,oldX-10,oldY);
  strokeWeight(5);
  birdX += vx;
  birdY += vy;
  //if (birdX > 1055 || birdX < 25) vx = -vx;
  //if (birdY > 695  || birdY < 25) vy = -vy;
  if (bDropping)
  {
      vy += 0.1;
      if (birdY > 695)
      {
        vy = -vy;
        vy += 1.5;
        vx -= 0.25;
        if (vy > 0) vy = 0;
        if (vx < 0) vx = 0;
      }
     
  }
}

void mousePressed()
{
  if (dist(mouseX,mouseY,birdX,birdY) < 50)
  {
    bMoving = true;
    oldX = birdX;
    oldY = birdY;
  }
}

void mouseReleased()
{
  bMoving = false;
  bDropping = true;
  if (dist(mouseX,mouseY,birdX,birdY) < 50)
  {
    vx = (oldX - mouseX)/8;
    vy = (oldY - mouseY)/8;
  }
}

void mouseDragged()
{
  if (bMoving)
  {
    birdX = mouseX;
    birdY = mouseY;
  }
}

weekkkkk12

1.練習程設會考題目

區間測速



區間測速-超速之王


CPE-YOU CAN SAY 11

#include <stdio.h>
#include <string.h>
char a[1001];
 int main()
 {
   while(1){
   scanf("%s",a);
   if( strcmp(a,"0")==0 )break;
   int odd=0,even=0;
   for(int i=0;a[i]!=0;i++)
   {
    if(i%2==0) even +=a[i]-'0';
    else odd+=a[i]-'0';
   }
   if( (even-odd)%11!=0 ) printf("%s is not a multiple of 11.\n",a);
   else printf ("%s is a multiple of 11.\n",a);
    }
}

10101010

1.畫圓


size(300,500);
ellipse(50,200+50,100,100);
ellipse(50+100,200+50,100,100);
ellipse(50+100+100,200+50,100,100);

ellipse(50,200+50+100,100,100);
ellipse(50+100,200+50+100,100,100);
ellipse(50+100+100,200+50+100,100,100);

ellipse(50,200+50+100+100,100,100);
ellipse(50+100,200+50+100+100,100,100);
ellipse(50+100+100,200+50+100+100,100,100);


2.圓圈縮放


void setup()
{
  size(300,500);
}
int n=5;
int r=300/n,w=r/2,rr=0;
void draw()
{
  for(int y=0;y<n;y++)
  {
    for(int x=0;x<n;x++)
    {
      ellipse(w+x*r,200+w+y*r,rr,rr);
    }
  }
  if(rr<r)rr++;

}

3.圓圈遞增


void setup()
{
  size(300,500);
}
int n=3,rr=0;
void draw()
{
  background(0);
  int r=300/n,w=r/2;
    for(int y=0;y<n;y++)
    {
      for(int x=0;x<n;x++)
      {
        ellipse(w+x*r,200+w+y*r,rr,rr);
      }
    }
    if(rr<r)rr+=r/30;
    else
    {
      n++;
      rr=0;
    }

4.選的圓圈會變紅色


void setup()
{
  size(300,500);
}
int ansx=1,ansy=2;
int n=3,rr=0;
void draw()
{
  background(0);
  int r=300/n,w=r/2;
    for(int y=0;y<n;y++)
    {
      for(int x=0;x<n;x++)
      {
        if(x==ansx&&y==ansy)fill(128);
        else fill(255);
        if(dist(mouseX,mouseY,w+x*r,200+w+y*r)<w)fill(255,0,0);
        ellipse(w+x*r,200+w+y*r,rr,rr);
      }
    }
 if(rr<r)rr+=r/30;

weeek2

1.隕石掉落


int x=150,y=100;
void setup(){
    size(300,200);
  }
void draw(){
  background(255);
  circle(x,y,30);
  y+=3; //1hr=60min,1min=60sec,1sec=60frame
    if(mousePressed){
       x=mouseX;
       y=mouseY;
    }
}



使用陣列的方式
int [ ]x={0,0,0,0,0,0,0,0,0,0};
int [ ]y={0,0,0,0,0,0,0,0,0,0};

int []x={0,0,0,0,0,0,0,0,0,0};
int []y={0,0,0,0,0,0,0,0,0,0};
int n=0;
void setup()
{
  size(300,200);
}
void draw(){
  background(255);
  for(int i=0;i<n;i++){///用迴圈
  circle(x[i],y[i], 30);
  y[i]+=3;
  if(y[i]>200-15) y[i]=200-15;
    }
  }
  void mousePressed(){
    x[n]=mouseX;
    y[n]=mouseY;
    n++;
  }

2.氣球


int x=200,y=200;
PImage img;
void setup(){
    size(500,500);
    img = loadImage("balloon.png");
 }
void draw(){
   background(255);
   image(img,x,y,100,150);
   y--;
   if(y<0) y=0;
}