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

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

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

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

Q&A

解決済

1回答

4002閲覧

ボールのアニメーションについて

Chuchuchu

総合スコア16

Processing

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

0グッド

0クリップ

投稿2018/04/27 04:42

質問内容
このプログラムを実行するとボールが壁でひたすら反射するだけのアニメーションになっていますが反発係数などを用いて本物のスーパーボールのような動きにさせたいのですが出来ません。

Processing

1void setup(){ 2 size(400,400); 3 smooth(); 4 noStroke(); 5 ellipseMode(CORNER); 6 fill(200,255,200); 7 frameRate(8); 8} 9 10int d=30,x=0,vx=2,y=0,vy=80; 11void draw(){ 12 background(255); 13 ellipse(x,y,d,d); 14 x+=vx; //時間tでのボール位置 15 y+=vy; 16 if(x<0||x+d>width){ //枠を超えたら 17 vx*=-1; //速度反転 18 if(x<0) x*=-1; //左端 19 else if(x+d>width) x=2*(width-d)-x; //右端 20 } 21 if(y<0||y+d>width){ 22 vy*=-1; 23 if(y<0) y*=-1; 24 else if(y+d>width) y=2*(width-d)-y; 25 } 26}

変数を用いて飛び跳ねる高さを変えようと思ったのですが上手くいきませんでした。誰か分かる方いたらよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

壁で反射した後の速度を、単に反転(-1を掛ける)にするのではなく、減衰させると飛び跳ねる高さがだんだん減っていって本物っぽくなります。

質問のコードで "*= -1" になっている部分を、" *= -0.95" とかに変えてみてください。

減衰率をいろいろ変えて確かめるには、減衰率を表す変数(下の例ではdelta)を設けて、計算式で使うようにするとコード中で変更するのが一か所になるので楽です。

delta = 0.05; //壁に反射すると速度が5%失われる vy*=(1-delta)*(-1);

投稿2018/04/27 04:56

coco_bauer

総合スコア6915

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

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

Chuchuchu

2018/04/27 09:54

回答ありがとうございます。―1倍しているところを変更したら確かにボールのような動きへ近づきました! 減衰率を設けてやってみたのですがボールが跳ね返ってからの高さをどんどん小さくしていきたいのですが小さくなったり大きくなったりしてしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問