/*************************************************************************************************************************************/
/* */
/* C O N S T R U C T I O N D ' U N E S P I R A L E L O G A R I T H M I Q U E */
/* S U R U N R E S E A U C A R R E : */
/* */
/* */
/* Author of '$xtc/SpiLogCar.01$c' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). */
/* */
/*************************************************************************************************************************************/
#define OK 0
#define COTEs2 3
#define DISTANCE0 0
#define DISTANCE2 ((COTEs2*COTEs2) + (COTEs2*COTEs2))
#define Xmin 0
#define Ymin 0
#define TEST(code,condition,X,Y) \
if (condition) \
{ \
printf(" %d=(%+03d,%+03d)",code,X,Y); \
compteur++; \
if (validation[X+COTEs2][Y+COTEs2] == 0) \
{ \
validation[X+COTEs2][Y+COTEs2]++; \
} \
else \
{ \
printf("\n collision"); \
} \
} \
else \
{ \
}
main()
{
int distance2;
/* Definition du carre de la distance. */
int x,y;
/* Definition des coordonnees. */
int compteur=0;
/* Compteur des points generes. */
int validation[2*COTEs2+1][2*COTEs2+1];
/* Pour valider le travail... */
for (y=-COTEs2 ; y<=COTEs2 ; y++)
{
for (x=-COTEs2 ; x<=COTEs2 ; x++)
{
validation[x+COTEs2][y+COTEs2] = 0;
}
}
for (distance2=DISTANCE0 ; distance2<=DISTANCE2 ; distance2++)
{
int changer=0;
for (y=Ymin ; y<=COTEs2 ; y++)
{
for (x=Xmin ; x<=COTEs2 ; x++)
{
if ((((x*x)+(y*y)) == distance2) && (x<=COTEs2) && (y<=COTEs2))
{
if (changer==0)
{
printf("\n carre de la distance=%04d ",distance2);
changer++;
}
else
{
}
TEST(1,(OK==OK),x,y);
TEST(2,(x != Xmin),Xmin-x,y);
TEST(3,((x != Xmin) && (y != Ymin)),Xmin-x,Ymin-y);
TEST(4,(y != Ymin),x,Ymin-y);
}
else
{
}
}
}
}
printf("\n nombre de points=%d\n",compteur);
if (compteur != ((2*COTEs2)+1)*((2*COTEs2)+1))
{
printf("\n le nombre de points n'est pas un carre");
compteur++;
}
else
{
}
for (y=-COTEs2 ; y<=COTEs2 ; y++)
{
for (x=-COTEs2 ; x<=COTEs2 ; x++)
{
if (validation[x+COTEs2][y+COTEs2] != 1)
{
printf("\n absence ou collision");
}
else
{
} \
}
}
}