について質問したものですが、返信遅れて申し訳ありません。
当たり判定の処理が出来たのですが、ソースが汚い感じでどうしたらスマートにきれいに出来るのかわかりません。
何かヒントでいいので助言よろしくお願いします。
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; }