Guest User

C++ Figury Chladniego

a guest
Aug 13th, 2014
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. // NOTE: compile with g++ filename.cpp -std=c++11
  2.  
  3. #include <iostream>
  4. #include <cmath>
  5. #define DIM 512
  6. #define DM1 (DIM-1)
  7. #define _sq(x) ((x)*(x))                           // square
  8. #define _cb(x) abs((x)*(x)*(x))                    // absolute value of cube
  9. #define _cr(x) (unsigned char)(pow((x),1.0/3.0))   // cube root
  10.  
  11. double max=0;
  12.  
  13. unsigned char RD(int i,int j){
  14.    double
  15. //
  16. // PARAMETRY FUNKCJI
  17. //
  18.       a = M_PI/4,  // Kat
  19.       m = 3,       // M
  20.       n = 4,       // N
  21.  
  22.       kontrast = 255, // kontrast wygenerowanego obrazu
  23.  
  24.       f=0,ca=0,sa=0,pdm=0,pdn=0,oo=0;
  25.    ca = cos(a);
  26.    sa = sin(a);
  27.    pdm = M_PI*100/DIM*m;
  28.    pdn = M_PI*100/DIM*n;
  29.    f = sin(pdm*i*0.01)*sin(pdn*j*0.01)*ca + sin(pdn*i*0.01)*sin(pdm*j*0.01)*sa;
  30.  
  31.    oo = abs(f*kontrast);
  32.  
  33.    if(oo > max)
  34.        max = oo;
  35.  
  36.    /* Teoretycznie `f` zwraca wartosci od -2 do +2. W praktyce wychodzi mniejszy
  37.       zakres, najczesciej -1 - 1. Dlatego mnoze przez `f` przez `kontrast` aby poprawic kontrast obrazu
  38.       i obcinam nadmiar. Efekt jest zadowalajacy.
  39.    */
  40.    if(oo > 255)
  41.       oo = 255;
  42.  
  43.    return oo;
  44. }
  45.  
  46. void pixel_write(int,int);
  47. FILE *fp;
  48.  
  49. int main(){
  50.     fp = fopen("Chladni.ppm","wb");
  51.     fprintf(fp, "P6\n%d %d\n255\n", DIM, DIM);
  52.     for(int j=0;j<DIM;j++)
  53.         for(int i=0;i<DIM;i++)
  54.             pixel_write(i,j);
  55.     fclose(fp);
  56.     std::cout << max << std::endl;
  57.     return 0;
  58. }
  59.  
  60. void pixel_write(int i, int j){
  61.     static unsigned char color[3];
  62.     color[0] = RD(i,j)&255;
  63.     color[1] = color[0];
  64.     color[2] = color[0];
  65.     fwrite(color, 1, 3, fp);
  66. }
Advertisement
Add Comment
Please, Sign In to add comment