home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 559a.lha / Lyap / lyap.c < prev    next >
C/C++ Source or Header  |  1991-09-02  |  3KB  |  99 lines

  1. ;/*
  2. lc -O -f8 -Lm881 Lyap.c
  3. copy Lyap Lyap.881
  4. lc -O -Lm Lyap.c
  5. copy Lyap Lyap.ffp
  6. delete Lyap
  7. lharc a Lyap.lzh Lyap.881 Lyap.ffp ReadMe.lyap Lyap.c Lyap.h Amiga.h
  8. quit
  9. */
  10.  
  11. /* ==================================================================== */
  12. /* File - Lyap.c - Lyapunov Space to Vista DEM converter.               */
  13. /* Created - 24 Aug 1991 - by : Clint H. Woeltjen                       */
  14. /* Copyright © 1991 by : Virtual Reality Laboratories, Inc.             */
  15. /* All Rights Reserved.                                                 */
  16. /* Placed in the Public Domain by Virtual Reality Laboratories, Inc.    */
  17. /* This program may be copied and distributed in any manner desired by  */
  18. /* the user. The only restriction is that this header be left on the    */
  19. /* source, and all of the files in this archive be distributed together.*/
  20. /* ==================================================================== */
  21.  
  22. #include "amiga.h"
  23. #include "Lyap.h"
  24.  
  25. main (argc, argv)
  26. int argc;
  27. char **argv;
  28. {
  29.    register int i;
  30.    int a,b,ix,ofile,iter;
  31.    register double x,y,z,tot;
  32.    double rx,ry,d,m;
  33.    short int *dem;
  34.    char *p;
  35.    char *q;
  36.  
  37.    if (argc == 1) {
  38.       printf("syntax: lyap scapefile xoffs yoffs divisor scale pattern iterations\n");
  39.       printf("   scapefile == Name of destination Vista Scape file\n");
  40.       printf("   xoffs == Starting r value in x := r*x*(1-x)\n");
  41.       printf("   yoffs == Starting r value in x := r*x*(1-x)\n");
  42.       printf("   divisor == d value needed for 258/d to cover desired width\n");
  43.       printf("   scale == Multiplier value to give satisfactory elevations\n");
  44.       printf("   pattern == lyapunov pattern of a and b\n");
  45.       printf("   iterations == Number of iterations per point\n");
  46.       exit(0);
  47.    }
  48.    rx = atof(argv[2]);
  49.    ry = atof(argv[3]);
  50.    d = atof(argv[4]);
  51.    m = atof(argv[5]);
  52.    iter = atoi(argv[7]);
  53.    q = (char *)cmap;
  54.    q += 32;
  55.    sprintf(q,"%s\0",argv[1]);
  56.    q += 32;
  57.    sprintf(q,"%s %s %s %s %s %s\0",argv[2],argv[3],argv[4],argv[5],argv[6],argv[7]);
  58.  
  59.    dem = (short int *)AllocMem(133128,0);
  60.  
  61.    for (a = 1; a <= 258; a++) {
  62.       for (b = 1; b <= 258; b++) {
  63.          tot = 0.0;
  64.          z = 1.1;
  65.          x = (double)a;
  66.          x = (x/d) + rx;
  67.          y = (double)b;
  68.          y = (y/d) + ry;
  69.          for (i = 0; i < iter; i++) {
  70.             p = argv[6];
  71.             while (*p) {
  72.                switch (p[0]) {
  73.                   case 'a':
  74.                      z = (x * z) * (1.0 - z);
  75.                      tot += (log(fabs(x * (1.0 - (2.0 * z)))));
  76.                      break;
  77.                   case 'b':
  78.                      z = (y * z) * (1.0 - z);
  79.                      tot += (log(fabs(y * (1.0 - (2.0 * z)))));
  80.                      break;
  81.                }
  82.                p++;
  83.             }
  84.          }
  85.          if (tot > 0.0) tot = 0.0;
  86.          tot = (-tot*m/(double)iter)/log(2.0);
  87.          ix = (a-1)*258+b-1;
  88.          dem[ix] = (short int)tot;
  89.       }
  90.       printf("Line == %4.4d\r",a);
  91.    }
  92.    printf("\n");
  93.    ofile = creat(argv[1],O_CREAT);
  94.    write(ofile,(char *)cmap,2048);
  95.    write(ofile,(char *)dem,133128);
  96.    close(ofile);
  97.    FreeMem(dem,133128);
  98. }
  99.