###前提・実現したいこと
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]=(Aexp(((x[i]-d)/B))+Kg*(x[i]-d))nx[i]+kg*(x[i]-d)vt[i]tx;
fy[i]=(Aexp(((y[j]-d)/B))+Kg*(y[j]-d))ny[j]+kg*(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]=((v0e0y[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
あなたの回答
tips
プレビュー