やろうとしているんのですが、
片方かもう片方の移動量の当たり判定がちゃんと計算されなくうまくいきません。(範囲内に入っていいるはずなのに通り抜けてしまいます。)
どうしたら通り抜けないでちゃんと当たり判定ができるのでしょうか?
質問がわかりにくいかもしれないのですがよろしくお願いします。
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(spd1>r)
{
float pre_x=x1+cos(angle+PI)*spd1,pre_y=y1+sin(angle+PI)*spd1;
float now_x,now_y;
for(int i=0;i<=spd1/r+1;i++)
{
now_x=pre_x-x2;
now_y=pre_y-y2;
if(now_x*now_x+now_y*now_y<(r)*(r))
{
return 1;
}
if(i==(int)spd1/r+1)
{
break;
}
if(i==(int)spd1/r)
{
pre_x+=cos(angle)*(spd1-i*r);
pre_y+=sin(angle)*(spd1-i*r);
}
else
{
pre_x+=cos(angle)*r;
pre_y+=sin(angle)*r;
}
}
}
if(spd2>r2)
{
float pre_x=x2+cos(angle+PI)*spd2,pre_y=y1+sin(angle+PI)*spd2;
float now_x,now_y;
for(int i=0;i<=spd2/r+1;i++)
{
now_x=pre_x-x1;
now_y=pre_y-y1;
if(now_x*now_x+now_y*now_y<(r2)*(r2))
{
return 1;
}
if(i==(int)spd2/r2+1 || spd2/r2==0)
{
break;
}
if(i==(int)spd2/r2)
{
pre_x+=cos(angle)*(spd2-i*r2);
pre_y+=sin(angle)*(spd2-i*r2);
}
else
{
pre_x+=cos(angle)*r2;
pre_y+=sin(angle)*r2;
}
}
}
if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)<r*r)
return 1;
return 0;
}