質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

1372閲覧

プロセシングでボールの大きさを変化させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2018/11/22 06:04

編集2018/11/22 06:33

前提・実現したいこと

プロセシングでボールを斜めに落とした時の動きをアニメーションにしています。
このコードを書き換えて、ボールの直径が次第に大きくなり、ある大きさに達すると、今度は次第に小さくなり、 ある小ささにになるとまた大きくなるようにしたいです。

加えて以下の条件があります。
・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というものです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

boolean関数を使うっていう意味がわからないけど

Java

1// constants 2final int fps = 60; // 1秒間あたりのフレーム数 3final float vx0min = -7; // vxの初期値の下限 4final float vx0max = 5; // vxの初期値の上限 5final float vy0min = 4; // vyの初期値の下限 6final float vy0max = 8; // vyの初期値の上限 7final float d = 40; // ボールの直径 8final float hueMax = 360.0; // 色相の最大値 9 10// variables 11Ball aBall; // ボールのオブジェクト1つを参照する変数 12 13void setup() { 14 frameRate(fps); 15 size(480, 480); 16 noStroke(); 17 colorMode(HSB, hueMax, 100, 100); 18 fill(0, 0, 0); 19 aBall = new Ball(); 20 aBall.setD(d); 21 aBall.setX(random(d / 2, width - d / 2)); 22 aBall.setY(random(d / 2, height / 5)); 23 aBall.setVX(random(vx0min, vx0max)); 24 aBall.setVY(random(vy0min, vy0max)); 25} 26 27void draw() { 28 background(0, 0, 100); 29 aBall.move(); 30 aBall.draw(); 31} 32 33/** 動くボールを表す */ 34class Ball { 35 final float gravity = 9.8 / fps; // 1フレームあたりの重力加速度 36 final float elas = 0.98; // 反発係数 37 float d; // ボールの直径 38 float scaleD; 39 float x; // 中心のx座標 40 float y; // 中心のy座標 41 float vx; // 速度のx成分 42 float vy; // 速度のy成分 43 float scale = 1.0; 44 boolean scaleAdd = true; 45 final float MAX_SCALE = 1.5; 46 final float MIN_SCALE = 0.5; 47 48 void setD(float d) { 49 this.d = d; 50 } 51 void setX(float x) { 52 this.x = x; 53 } 54 void setY(float y) { 55 this.y = y; 56 } 57 void setVX(float vx) { 58 this.vx = vx; 59 } 60 void setVY(float vy) { 61 this.vy = vy; 62 } 63 64 void move() { 65 x += vx; // ボールが速度ぶん移動する 66 vy += gravity; // 速度のy成分に重力加速度を加算する 67 y += vy; // ボールが速度ぶん移動する 68 69 // スケール 70 float _addScale = this.scaleAdd ? 0.01 : -0.01; 71 this.scale = min(max(this.scale + _addScale, this.MIN_SCALE), this.MAX_SCALE); 72 if(this.scale >= this.MAX_SCALE || this.scale <= this.MIN_SCALE) { 73 this.scaleAdd = !this.scaleAdd; 74 } 75 this.scaleD = this.d * this.scale; 76 77 if (x < this.scaleD / 2) { 78 vx = - vx * elas; 79 x = this.scaleD / 2; 80 } else if (x > width - this.scaleD / 2) { 81 vx = - vx * elas; 82 x = width - this.scaleD / 2; 83 } 84 if (y > height - this.scaleD / 2) { 85 vy = - vy * elas; 86 y = height - this.scaleD / 2; 87 } else if (y < this.scaleD / 2) { 88 vy = - vy * elas; 89 y = this.scaleD / 2; 90 } 91 92 } 93 void draw() { 94 fill(calcHue(vx, vy), 100, 100); 95 ellipse(x, y, this.scaleD, this.scaleD); 96 } 97 98 float calcHue(float vx, float vy) { 99 if(this.scaleAdd != false) { 100 return (100); 101 } 102 return (0); 103 //return (sqrt(vx * vx + vy * vy) * 16) % hueMax; 104 } 105}

こんな感じ?

投稿2018/11/22 06:26

編集2018/11/22 06:34
rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/22 06:30

回答ありがとうございます。参考にさせていただきます。 説明が足りていませんでしたがbooleanを使う条件というのは、いま大きくなる状態か小さくなる状態かを保持するboolean型の変数を属性に用意するというものです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問