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;};