について質問したものですが、返信遅れて申し訳ありません。
当たり判定の処理が出来たのですが、ソースが汚い感じでどうしたらスマートにきれいに出来るのかわかりません。
何かヒントでいいので助言よろしくお願いします。
int atarihantei(float x1,float y1,float x2,float y2,float angle,float spd1,float spd2,float rang1, float rang2)
{
float r=rang1+CRANG;
float r2=rang2+CRANG;
if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)<(r+r2)*(r+r2))
return 1;
if(spd1<0)
spd1=-1*spd1;
if(spd2<0)
spd2=-1*spd2;
if(spd1+spd2>r)
{
float pre_x1=x1+cos(0.0)*(spd1+spd2),pre_y1=y1+sin(0.0)*(spd1+spd2);
float pre_x2=x2,pre_y2=y2;
float now_x,now_y;
for(int i=0;i<(spd1+spd2)/(r+r2)-1;i++)
{
now_x=pre_x1-pre_x2;
now_y=pre_y1-pre_y2;
if(now_x*now_x+now_y*now_y<(r+r2)*(r+r2))
{
return 1;
}
if(i>=(int)((spd1+spd2)/(r+r2))-1)
{
break;
}
if(i==(int)((spd1+spd2)/(r+r2))-2)
{
float t=((spd1+spd2)-i*(r+r2));
pre_x1-=cos(PI)*t;
pre_y1-=sin(PI)*t;
}
else
{
float t=cos(PI)*(r+r2);
float t2=sin(PI)*(r+r2);
pre_x1+=t;
pre_y1+=t;
}
}
}
if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)<(r+r2)*(r+r2))
return 1;
return 0;
}