TeslaCoilGirl

Mandelbrot C

Sep 21st, 2021 (edited)
932
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5. #define WIDTH 100.0
  6. #define HEIGHT 115.0
  7.  
  8. #define WLOWER -2.0
  9. #define WUPPER 2.0
  10. #define HLOWER -2.0
  11. #define HUPPER  2.0
  12.  
  13. #define ZOOMREAL -1.2
  14. #define ZOOMIMAG -0.8
  15.  
  16. #define SPEED 0.99
  17.  
  18. #define MINITER 50
  19. #define MAXFRAMES 3
  20.  
  21. char ascii[20]= "`.,-^*+;?$&@#";
  22.  
  23. char calcPoint(double* real, double* im, double* realZ, double* imZ, int iter){
  24.  
  25.     if(iter == 0) {                                 /* BOUND CHECKER */
  26.         return ' ';                                              /* DRAW ASCII VAL */
  27.     }
  28.     if((*real >2.0)||(*real < -2.0)){
  29.         return ascii[iter%13];
  30.     }
  31.     if((*im >2.0)||(*im < -2.0)){
  32.         return ascii[iter%13];
  33.     }
  34.        
  35.    
  36.     //printf("%lf %lf\n", *real, *im);
  37.     double newReal = (*real * *real) - (*im * *im) + *realZ;
  38.     double newImag = (2.0 * *real * *im)+*imZ;
  39.    
  40.     return calcPoint (&newReal, &newImag, realZ, imZ, iter-1);
  41.    
  42.  
  43. }
  44.  
  45. void calcArray(double* wLower, double* wUpper, double* hLower, double* hUpper, int iter){
  46.     for(int i = 0; i < WIDTH; i++){
  47.         for(int j = 0; j < HEIGHT; j++){
  48.             double temprealZ;
  49.             double tempimZ;
  50.             temprealZ =*wUpper-*wLower;
  51.             tempimZ = *hUpper-*hLower;
  52.            
  53.             temprealZ = temprealZ/WIDTH;
  54.             tempimZ = tempimZ/HEIGHT;
  55.             temprealZ = (double)i*fabs(temprealZ)+*wLower;
  56.             tempimZ = *hUpper-(double)j*fabs(tempimZ);
  57.        
  58.             double temprealC = temprealZ;
  59.             double tempimC = tempimZ;
  60.  
  61.             double* realZ = &temprealZ;
  62.             double* imZ = &tempimZ;
  63.             double* realC = &temprealC;
  64.             double* imC = &tempimC;
  65.            
  66.  
  67.             char mandelPlot = calcPoint(realZ, imZ, realC, imC, iter);
  68.             printf("%c", mandelPlot);
  69.         }
  70.         printf("\n");
  71.     }
  72. }
  73.  
  74. void calcBounds(double* wLower, double* wUpper, double* hLower, double* hUpper){
  75.    
  76.     *wLower= (ZOOMREAL+*wLower*SPEED)/2.0;   // IMAGE INCREASES SPEED % IN SIZE
  77.     *wUpper=(ZOOMREAL+*wUpper*SPEED)/2.0;   // WITH EVERY ITERATION
  78.     *hLower=(ZOOMIMAG+*hLower*SPEED)/2.0;   // EVERY DIRECTION IS SCALED
  79.     *hUpper=(ZOOMIMAG+*hUpper*SPEED)/2.0;   // SPEED % INDIVIDUALLY
  80. }
  81.  
  82. int main(){
  83.    double wLower = WLOWER;
  84.    double wUpper = WUPPER;
  85.    double hLower = HLOWER;
  86.    double hUpper = HUPPER;
  87.    
  88.    int currIter = MINITER;
  89.    int frameCount = 0;
  90.    
  91.    while(frameCount < MAXFRAMES){
  92.     calcArray(&wLower, &wUpper, &hLower, &hUpper, currIter);
  93.     calcBounds(&wLower,&wUpper,&hLower,&hUpper);
  94.     currIter++;
  95.     frameCount++;
  96.     printf("break\n");
  97.    }
  98.    return 0;
  99. }
Add Comment
Please, Sign In to add comment