Neumann János, Nikola Tesla, Albert Einstein
  • ithink
    #488
    A programok c++ban vannak megírva, linuxon ha a fejlesztői környezet fel van installálva, akkor egy konzolban egyszerűen lefordíthatóak ezt begépelve.
    cc x.cpp /usr/X11R6/lib/libX11.so.6.2 -lm
    ha nem találja a 6.2est, akkor meg kell keresni, milyen van felrakva.
    A futtatható file a ./a.out

    Ha a két vonalat kiszedem, akkor érvényes a definició, akkor csak egy forrás lesz(második kép):
    //#define one_src

    float surface_faz[1200][20];
    float3 center=float3(300,100,0);

    for(int i=0;i<20;i++)
    for(int x=0;x<1200;x++) surface_faz[x][i]=0.0;


    for(int y=0;y<501;y++)
    for(int x=0;x<1200;x++) {
    float amp=0.0;


    for(int i=0;i<20;i++) {
    float3 pos=float3(x+i*10,y-i*4,0);
    float3 dir=pos-center;

    float dis1=sqrt(dot(dir,dir));
    amp+=sin(dis1*M_PI/30.0);

    if(y==500) surface_faz[x][i]=dis1;
    }

    int color=(int)(amp*15.0);
    if(color> 255) color= 255;
    if(color<-255) color=-255;

    if(color<0) pixel(x,y,-color);
    else pixel(x,y,color<<16);
    }




    for(int y=500;y<1000;y++)
    for(int x=0;x<1200;x++) {
    float amp=0.0;

    #ifdef one_src
    int j=370;
    #else
    for(int j=0;j<1200;j++)
    #endif
    {
    float3 pos2=float3(j,500,0);
    float3 pos=float3(x,y,0);
    float3 dir=pos-pos2;

    float dis1=sqrt(dot(dir,dir));

    for(int i=0;i<20;i++) {
    amp+=sin(dis1*M_PI/15.0+surface_faz[j][i]*M_PI/30.0);
    }
    }
    #ifndef one_src
    amp/=40.0;
    #endif

    int color=(int)(amp*15.0);
    if(color> 255) color= 255;
    if(color<-255) color=-255;

    if(color<0) pixel(x,y,-color);
    else pixel(x,y,color<<16);
    }


    Ezt meg be kell tenni az xwindow kezelő elé(#446), mert vektorokra is sükség van:

    class float3
    {
    public:
    float x,y,z;

    float3::float3() {x=0.0;y=0.0;z=0.0;};
    float3::float3(int x2,int y2,int z2) {x=x2;y=y2;z=z2;};
    float3::float3(float x2,float y2,float z2) {x=x2;y=y2;z=z2;};

    float3 operator +(float3 v2) {float3 v1;v1.x=x+v2.x;v1.y=y+v2.y;v1.z=z+v2.z; return v1;};
    float3 operator -(float3 v2) {float3 v1;v1.x=x-v2.x;v1.y=y-v2.y;v1.z=z-v2.z; return v1;};
    float3 operator *(float3 v2) {float3 v1;v1.x=x*v2.x;v1.y=y*v2.y;v1.z=z*v2.z; return v1;};
    float3 operator /(float3 v2) {float3 v1;v1.x=x/v2.x;v1.y=y/v2.y;v1.z=z/v2.z; return v1;};

    float3 operator +(float v2) {float3 v1;v1.x=x+v2;v1.y=y+v2;v1.z=z+v2; return v1;};
    float3 operator -(float v2) {float3 v1;v1.x=x-v2;v1.y=y-v2;v1.z=z-v2; return v1;};
    float3 operator *(float v2) {float3 v1;v1.x=x*v2;v1.y=y*v2;v1.z=z*v2; return v1;};
    float3 operator /(float v2) {float3 v1;v1.x=x/v2;v1.y=y/v2;v1.z=z/v2; return v1;};
    };
    float dot(float3 w1,float3 w2) {return w1.x*w2.x+w1.y*w2.y+w1.z*w2.z;};