前提・実現したいこと
プロセシングでボールを斜めに落とした時の動きをアニメーションにしています。
このコードを書き換えて、ボールの直径が次第に大きくなり、ある大きさに達すると、今度は次第に小さくなり、 ある小ささにになるとまた大きくなるようにしたいです。
加えて以下の条件があります。
・boolean関数を使う。
・ボールの直径の最小値と最大値をあらかじめ設定((最大値、最小値は任意です)し、 大きくなる状態では最大値まで単調増加、 小さくなる状態では最小値まで単調減少する。
・大きくなる状態と小さくなる状態でボールの色も変える。
初めて質問させていただくので何か不備があったら教えてください。回答よろしくお願いします。
該当のソースコード
processing
1 2// constants 3final int fps = 60; // 1秒間あたりのフレーム数 4final float vx0min = -7; // vxの初期値の下限 5final float vx0max = 5; // vxの初期値の上限 6final float vy0min = 4; // vyの初期値の下限 7final float vy0max = 8; // vyの初期値の上限 8final float d = 40; // ボールの直径 9final float hueMax = 360.0; // 色相の最大値 10 11// variables 12Ball aBall; // ボールのオブジェクト1つを参照する変数 13 14void setup() { 15 frameRate(fps); 16 size(480, 480); 17 noStroke(); 18 colorMode(HSB, hueMax, 100, 100); 19 fill(0, 0, 0); 20 aBall = new Ball(); 21 aBall.setD(d); 22 aBall.setX(random(d / 2, width - d / 2)); 23 aBall.setY(random(d / 2, height / 5)); 24 aBall.setVX(random(vx0min, vx0max)); 25 aBall.setVY(random(vy0min, vy0max)); 26} 27 28void draw() { 29 background(0, 0, 100); 30 aBall.move(); 31 aBall.draw(); 32} 33 34 35/** 動くボールを表す */ 36class Ball { 37 final float gravity = 9.8 / fps; // 1フレームあたりの重力加速度 38 final float elas = 0.98; // 反発係数 39 float d; // ボールの直径 40 float x; // 中心のx座標 41 float y; // 中心のy座標 42 float vx; // 速度のx成分 43 float vy; // 速度のy成分 44 45 void setD(float d) { 46 this.d = d; 47 } 48 void setX(float x) { 49 this.x = x; 50 } 51 void setY(float y) { 52 this.y = y; 53 } 54 void setVX(float vx) { 55 this.vx = vx; 56 } 57 void setVY(float vy) { 58 this.vy = vy; 59 } 60 void move() { 61 x += vx; // ボールが速度ぶん移動する 62 vy += gravity; // 速度のy成分に重力加速度を加算する 63 y += vy; // ボールが速度ぶん移動する 64 if (x < d / 2) { 65 vx = - vx * elas; 66 x = d / 2; 67 } else if (x > width - d / 2) { 68 vx = - vx * elas; 69 x = width - d / 2; 70 } 71 if (y > height - d / 2) { 72 vy = - vy * elas; 73 y = height - d / 2; 74 } else if (y < d / 2) { 75 vy = - vy * elas; 76 y = d / 2; 77 } 78 } 79 void draw() { 80 fill(calcHue(vx, vy), 100, 100); 81 ellipse(x, y, d, d); 82 } 83 84 85 float calcHue(float vx, float vy) { 86 return (sqrt(vx * vx + vy * vy) * 16) % hueMax; 87 } 88} 89 90###追記 91条件の「boolean関数を使う」は 92・いま大きくなる状態か小さくなる状態かを保持するboolean型の変数を属性に用意する 93というものです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/22 06:30