Allora ragazzi io ho risolto (in parte) così:
codice:
int foo(int x1,int y1, int x2, int y2, int l)
{
int ulx, lrx;
int uly, lry;
int flag=0;
// bisogna prenderle in modulo poichè l'universo è toroidale
ulx=(x1-2+l) % l;
lrx=(x1+2) % l;
uly=(y1-2+l) % l;
lry=(y1+2) % l;
if ( (ulx <= x2 && x2 <= lrx) &&
(uly <= y2 && y2 <= lry))
flag=1;
return flag;
}
Funziona , tranne in un solo caso, cioè se tipo mi trovo
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,2,0,0,0,0,0,1
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
Se il centro è dove stà il 2(x1,y1) e 1(x2,y2) invece indica la coordinata del punto che invade l'area, in questo caso non va bene perchè calcolando ulx , questo è uguale a 7 e fa:
if (7 <= 7 && 7 <= 3) && ( 1<=3 && 3 <= 5) , dovrebbe andare bene ma nella prima condizione fa 7<= 3 e sballa.