More Related Content
Similar to プログラミング技法特論 (9)
More from Noritada Shimizu
More from Noritada Shimizu (20)
プログラミング技法特論
- 2. 前回まで float x, y, r, dx, dy; void setup(){ size(400, 400); noStroke(); fill(255, 0, 0, 255); x = width / 2; y = height / 2; r = 20; dx = 0.5; dy = 0.5; } void draw(){ background(0, 0, 0); ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1; } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1; } } float dx(){ float ret = (mouseX – x) * 0.01; return ret; } float dy(){ float ret = (mouseY – y) * 0.01; return ret; } void mousePressed(){ dx = dx(); dy = dy(); }
- 3. 円の動きに関する部分 float x, y, r, dx, dy; void setup(){ size(400, 400); noStroke(); fill(255, 0, 0, 255); x = width / 2; y = height / 2; r = 20; dx = 0.5; dy = 0.5; } void draw(){ background(0, 0, 0); ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1; } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1; } } float dx(){ float ret = (mouseX – x) * 0.01; return ret; } float dy(){ float ret = (mouseY – y) * 0.01; return ret; } void mousePressed(){ dx = dx(); dy = dy(); }
- 7. ステップ1:まとめる部分を決める float x, y, r, dx, dy; void setup(){ size(400, 400); noStroke(); fill(255, 0, 0, 255); x = width / 2; y = height / 2; r = 20; dx = 0.5; dy = 0.5; } void draw(){ background(0, 0, 0); ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1; } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1; } } float dx(){ float ret = (mouseX – x) * 0.01; return ret; } float dy(){ float ret = (mouseY – y) * 0.01; return ret; } void mousePressed(){ dx = dx(); dy = dy(); }
- 10. ステップ4:クラス定義にまとめる class Disk{ float x, y, r, dx, dy; void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1; } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1; } } float dx(){ float ret = (mouseX – x) * 0.01; return ret; } float dy(){ float ret = (mouseY – y) * 0.01; return ret; } }
- 11. ステップ5:必要なメソッドを足す class Disk{ float x, y, r, dx, dy; void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1; } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1; } } void dx(){ dx= (mouseX – x) * 0.01; } void dy(){ dy = (mouseY – y) * 0.01; } void draw(){ ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } }
- 13. 定義したクラスを使った宣言 Disk d; void setup(){ size(400, 400); smooth(); colorMode(RGB, 100, 100, 100, 100); } void draw(){ background(0, 0, 0); } void mousePressed(){ }
- 14. new Disk d; void setup(){ size(400, 400); smooth(); colorMode(RGB, 100, 100, 100, 100); d = new Disk(); } void draw(){ background(0, 0, 0); } void mousePressed(){ }
- 15. インスタンス Disk d; void setup(){ size(400, 400); smooth(); colorMode(RGB, 100, 100, 100, 100); d = new Disk(); } void draw(){ background(0, 0, 0); } void mousePressed(){ }
- 16. インスタンスメソッドを使おう Disk d; void setup(){ size(400, 400); smooth(); colorMode(RGB, 100, 100, 100, 100); d = new Disk(); d.x = 200; d.y = 200; d.r = 20; d.r = 20; } void draw(){ background(0, 0, 0); d.draw(); } void mousePressed(){ d.dx(); d.dy(); }
- 18. 円と円との重なり 中心(x2, y2) 直径r2 中心(x1, y1), 直径r1 dist(x1, y1, x2, y2); <= (r2 + r1) / 2 2010.6.7 18 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>