home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 27 / CDROM27.iso / linux / lf / july1998 / burbujas.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-07-03  |  3.0 KB  |  92 lines

  1. /*///////(Copyright)//////(No modificar estas 11 primeras Lineas)/////////  */
  2. /*     Autor: Antonio Castro Snurmacher (E-mail <acastro@ctv.es> )          */
  3. /*                                                                          */
  4. /*  Este fuente puede ser utilizado, distribuido, y modificado libremente   */
  5. /*  pero siempre se deberß respetar la propiedad intelectual de su autor.   */
  6. /*  El autor renuncia a todo tipo de beneficio econ≤mico y no se hace       */
  7. /*  responsable de los posibles perjuicios derivados del uso del mismo.     */
  8. /*  Toda modificaci≤n queda sujeta a las mismas condiciones de uso que el   */
  9. /*  original. En caso de traducci≤n deberß conservarse el texto original    */
  10. /*  de esta cabecera y a±adirse la traducci≤n a continuaci≤n de ella.       */
  11. /*//////////////////////////////////////////////////////////////////////////*/
  12.  
  13. /*--------------------------------------------------------------------------*/
  14. /*     burbujas.c  (1-Mayo-1998)                                            */
  15. /*--------------------------------------------------------------------------*/
  16. /*  Esta versi≤n esta dedicada a su inclusi≤n en la revista LinuxFocus      */
  17. /*--------------------------------------------------------------------------*/
  18.  
  19.  
  20. /*************************************************************/
  21. /**    Compilar mediante cc balls.c -lm -o balls            **/
  22. /*************************************************************/
  23. #include <stdlib.h>
  24. #include <stdio.h>
  25. #include <math.h>
  26.  
  27. #define MAX_X       1000.0
  28. #define MAX_Z        750.0
  29. #define MAX_BALLS   10000
  30. #define MIN_RAD     3.0
  31. #define MAX_RAD     55.0
  32.  
  33. double PosX[MAX_BALLS];
  34. double PosZ[MAX_BALLS];
  35. double Rad[MAX_BALLS];
  36. int contBall=0;
  37. int contIter=0;
  38. int i;
  39.  
  40. /*****************************************/
  41. void intento(double x, double z, int cont){
  42.    double distX2;
  43.    double distZ2;
  44.    double rad, cur_rad;
  45.  
  46.    contIter++;
  47.    rad=MAX_RAD;
  48.    for (i=0; i<contBall; i++){
  49.         distX2  = x - PosX[i];
  50.         distX2 *= distX2;
  51.         distZ2  = z - PosZ[i];
  52.         distZ2 *= distZ2;
  53.         cur_rad=sqrt(distX2 + distZ2)-Rad[i];
  54.         if (cur_rad < rad)
  55.         rad=cur_rad;
  56.    }
  57.    if (rad > MAX_RAD)
  58.          rad = MAX_RAD;
  59.    if (rad >= MIN_RAD ){
  60.        Rad[contBall]=rad;
  61.        PosX[contBall]=x;
  62.        PosZ[contBall]=z;
  63.        printf("sphere { <%4.0f, 0, %4.0f> %3.7f texture { textureBall } } //(%d/%d)\n", x, z, rad, contBall,contIter);
  64.        contBall++;
  65.        if ( (contBall >= MAX_BALLS) )  ){
  66.               exit(0);
  67.        }
  68.           else{
  69.               return;   /** Siguiente bola **/
  70.           }
  71.    }
  72.    return; /** fallo nuevo intento **/
  73. }
  74.  
  75. /****************************************/
  76. int r_rand(int m){
  77.    return (int) ( (double)m * rand()/(RAND_MAX+1.0));
  78. }
  79.  
  80. /****************************************/
  81. main (){
  82.   int X, Z;
  83.  
  84.   for(;;){
  85.         X=r_rand(MAX_X);
  86.         Z=r_rand(MAX_Z);
  87.     X -= MAX_X/2;
  88.     Z -= MAX_Z/2;
  89.         intento(X, Z, contBall);
  90.    }
  91. }
  92.