2017年11月16日 星期四

師大柯雷吉歐的計圖筆記-Week10

一、製作Android程式

1.一樣開啟Processing,點右上角-添加模式

下載Android模式

2.由於使用Android模式要接Android手機,沒有手機也可以用Java模式寫

void setup(){
 fullScreen(); 
}
void draw(){
 if(mousePressed) background(255,0,255);
 else background(0,255,0);
}

可以讓手機未觸碰時顯示綠色
觸碰螢幕及顯示紫色

*連接手機後要設定-開發人員選項-USB偵錯模式開啟

二、球球碰撞偵測

下面是葉正聖老師的範例程式碼
可以使2顆球在小於多少半徑會以反射角反彈回去

void setup() {

size(500, 500);

}

float ballX=250, ballY=450, ballVX=1.3, ballVY=-10;

float ball2X=250, ball2Y=50;

void draw() {

if ( dist(ballX, ballY, ball2X, ball2Y)<100 ) {

float cx=(ballX+ball2X)/2, cy=(ballY+ball2Y)/2;

float nx=ballX-ball2X, ny=ballY-ball2Y;

line(ballX,ballY, ball2X,ball2Y);

PVector N=new PVector(nx, ny);

N.normalize();

PVector v0=new PVector(ballVX, ballVY);

float len= -N.dot(v0);

v0.add(N.mult(len*2));

line(cx,cy, cx+10*ballVX, cy+10*ballVY);

line(cx,cy, cx+20*v0.x, cy+20*v0.y);

ellipse(cx, cy, 10, 10);

stroke(0); 

line(ballX, ballY, ball2X, ball2Y);

stroke(255, 128, 0); 

line(cx, cy, cx+5*ballVX, cy+5*ballVY);

stroke(255, 128, 0); 

line(cx, cy, cx+5*v0.x, cy+5*v0.y);

stroke(255, 0, 0); 

line(cx, cy, cx+N.x, cy+N.y);

//return;

ballVX=v0.x; 

ballVY=v0.y;

}

background(255);

ballX+=ballVX; 

ballY+=ballVY;

if(ballX<50 || ballX>500-50) ballVX = -ballVX;

if(ballY<50 || ballY>500-50) ballVY = -ballVY;

ellipse(ballX, ballY, 100, 100);

ellipse(ball2X, ball2Y, 100, 100);

}

void mouseDragged(){

ball2X=mouseX; ball2Y=mouseY;

}


沒有留言:

張貼留言