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

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

ただいまの
回答率

90.76%

  • Processing

    237questions

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

processing 物体の反発

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 149

oruta_key

score 1

前提・実現したいこと

processingのプログラムにおいて、物体が反発を行うように改良しているのですが、上手くいきません。
どのようにプログラムを改良すればよいでしょうか。

何卒よろしくお願いします。

発生している問題・エラーメッセージ

反発せず、物体それぞれが目標方向へと向かう。

該当のソースコード

int n=3;
float r=1;
float a=40;
float rij;
float d;
float A=2;
float B=0.08;
float K=12;
float k=1;
float g;
float ri[]=new float[n];
float rj[]=new float[n];
float fx[]=new float[n];
float fy[]=new float[n];
float nx[]=new float[n];
float ny[]=new float[n];

float x[]=new float[n];
float y[]=new float[n];
float vx[]=new float[n];
float vy[]=new float[n];
float X[]=new float[n];
float Y[]=new float[n];
float Vx[]=new float[n];
float Vy[]=new float[n];
float Lx = 20, Ly = 10;
float dt = 0.01;
float m=1;
float e0x[]=new float[n];
float e0y[]=new float[n];
float tx;
float ty;
Float Xe=Lx/2;
float Ye=Ly;
float v0=1;
float t=1;

float vt[]= new float[n]; 

void setup(){
size(400, 400);
frameRate(50);

for(int i=0;i<n;i++){

x[i] = 10+i*3;
y [i]= 5;
vx [i]= 0;
vy [i]= 0;

ellipse(x[i] * width / Lx, y[i] * height / 2 /Ly, r * width / Lx, r * height/ 2 / Ly);

}
}

void draw(){
background(200);

for(int i=0;i<n;i++){

for(int j=0;j<n;j++){

d=sqrt(pow(x[j]-x[i],2)+pow(y[j]-y[i],2));
nx[i]=(x[j]-x[i])/d;
ny[j]=(y[j]-y[i])/d;
tx=-ny[j];
ty=nx[i];
vt[i]=(x[j]-x[i])*tx+(y[j]-y[i])*ty;
rij=(ri[i]+rj[j])/2;

g=rij-d;
if(g<0){
g=0;
}

fx[i]=(A*exp(((x[i]-d)/B))+K*g*(x[i]-d))*nx[i]+k*g*(x[i]-d)*vt[i]*tx;
fy[i]=(A*exp(((y[j]-d)/B))+K*g*(y[j]-d))*ny[j]+k*g*(y[j]-d)*vt[i]*ty;
ellipse(x[i],y[i],ri[i],ri[i]);
}

e0x[i]=((Xe-x[i])/sqrt(pow(Xe-x[i],2)+pow(Ye-y[i],2)));
e0y[i]=((Ye-y[i])/sqrt(pow(Xe-x[i],2)+pow(Ye-y[i],2)));

Vx[i]=((v0*e0x[i]-vx[i])/t)*dt+vx[i];
Vy[i]=((v0*e0y[i]-vy[i])/t)*dt+vy[i];
X[i] = x[i] + vx[i] * dt;
Y[i]= y[i] + vy [i]* dt;
x[i]=X[i];
y[i]=Y[i];
vx[i]=Vx[i];
vy[i]=Vy[i];

if ((x[i] + r/2 >= Lx) || (x[i] - r/2 <= 0))
{
vx[i]= -vx[i] ;
}
if ((y[i] + r/2 >= Ly) || (y[i] - r/2 <= 0))
{
vy[i] = -vy[i] ;
}

fill(0);
line(0,height/2,width/2-20,height/2);
fill(0);
line(width/2+20,height/2,width,height/2);
fill(0);
fill(255);

ellipse(x[i] * width / Lx, y[i] * height / 2 /Ly, r * width / Lx, r * height/ 2 / Ly);

}}

試したこと

おそらく

d=sqrt(pow(x[j]-x[i],2)+pow(y[j]-y[i],2));
nx[i]=(x[j]-x[i])/d;
ny[j]=(y[j]-y[i])/d;
tx=-ny[j];
ty=nx[i];
vt[i]=(x[j]-x[i])*tx+(y[j]-y[i])*ty;
rij=(ri[i]+rj[j])/2;

g=rij-d;
if(g<0){
g=0;
}

この式だと思うのですが、上手く式が動作せず、この式判定後のプログラムにうまく反応しません。

補足情報(言語/FW/ツール等のバージョンなど)

processing

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    processing 描画について

    processingでこれを描こうと思い size(600,600); background(0); strokeWeight(10); int p ; int a 

  • 受付中

    processingで特定の点の軌跡を残したい

    processing で、 円Aの周上を動径の回転に沿って移動する点を中心とする円Bを描き、 円Bの周上を動径の回転に沿って移動する点を中心とする円Cを描き、

  • 解決済

    processing 配列を用いなければならない

    前提・実現したいこと processingのプログラムにおいて、出口へと向かうプログラムを作成しています。このプログラムを配列を用いて球体を複数にしなければならないのですが、やり方

  • 受付中

    processingのpushmatrixの意味

    processingのpushmatrixの意味がいまいちピンときません。 pushmatrixとは「現在の座標を保存する」ためのものらしいのですが、 その「現在の座標を保存する」

  • 解決済

    円柱の曲面に文字や図形を表示したい。

    いつもお世話になっています。  前提・実現したいこと 表題通りです。 円柱の曲面に文字や図形を表示したいです。 テクスチャマッピングなるもので要件を満足する方法があるのです

  • 解決済

    表示に穴を開けるには。

     前提・実現したいこと 以下の図の赤丸のようにスケールバーの指定の場所をくり抜いて奥の表示を出現させるテクニック、あるいは目的の描写を周囲に被らせないように行うトリミングのテクニッ

  • 解決済

    Processing実行中のCPU使用率が異常に高い

    Processing実行中にタスクマネージャーを見てみると、Java(TM) Platform SE binaryが常に30%以上ものCPUを使っています。数行程度の簡単なコードで

  • 解決済

    弾幕ゲームの作成に関して

     processingでのゲーム作成 初めて投稿します。 最近processingを勉強し始め、ゲームを作るという課題が出て、私は弾幕シューティングゲームを作ろうと思い、作成してい

同じタグがついた質問を見る

  • Processing

    237questions

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