draq0n Creative Commons License 2012.01.22 0 0 519

 Itt van amirol az elobb irtam. Ket szemben halado hullam kozti osszes hullam{n=100 db} kialakit a teridoben egy hullamcsomagot, ami az adott KR-ben nem mozog. A hullamhossz ugy lehet megjeleniteni, hogy ranagyitunk skala=10.0-el, es letiltjuk az alabbi sort:

//amp.y+=cos(fazis);

 

A ket sebesseg {energia} nem csal v1=-c*0.4 es v2=c*0.4 lehet hanem pl v1=-c*0.3 v2=-c*0.5 is. Az energia kulonbseg a hullamcsomag szelesseget {es hullamhosszat} befolyasolja. Na es a vilagvonal doleset, ami a hullamcsomag sebessege, mivel teridoben van abrazolva minden.

 

{a szamitas nem komplex szamokkal tortent, csak forgo amplitudoval..}

{Az osszetevok megjelenitesenel az amp.y+=cos(fazis) sort mindig tiltani kell, mert ha nincs interferencia, a komplex hullamoknal az amplitudo minden fazisban 1!}

 

 

 

#ifdef GL_ES
precision highp float;
#endif

uniform vec2 resolution;
uniform float time;
uniform vec4 mouse;

#define pi 3.1415926
float radian=pi/180.0;



void main(void)
{
 vec2 mouse2=mouse.xy/resolution.xy;
 vec3 screen=vec3(gl_FragCoord.xy/resolution.xy,0.0);


 float c=1.0,m=1.0,h=1.0;
 float v1=-c*0.4;//0 -> 1
 float v2= c*0.4;//v1 -> 1
 float b1=1.0/sqrt(1.0-v1*v1/(c*c));    float l1=h/(m*b1*v1);
 float b2=1.0/sqrt(1.0-v2*v2/(c*c));    float l2=h/(m*b2*v2);

 float a1=atan(v1/c);
 float a2=atan(v2/c);
 vec3 p1=vec3(sin(a1),cos(a1),0.0);
 vec3 p2=vec3(sin(a2),cos(a2),0.0);
 l1*=sin(a1);
 l2*=sin(a2);
    



 vec2 amp=vec2(0.0,0.0);
 float skala=100.0;//nagyitas

 float n=100.0;
 for(int i=0;i<100;i++)//n!  hullamcsomag
 {
   float t=float(i)/n;
//t=0.0;//egyik osszetevo
//t=1.0;//masik

   vec3 p3=p1+(p2-p1)*t;//linear interpolation
   float hhossz=l1+(l2-l1)*t;
   hhossz/=skala;
   float k=pi*2.0/hhossz;

   float tav=dot(screen,p3);  
   float fazis=tav*k ;
   amp.x+=sin(fazis);
   amp.y+=cos(fazis);
 }


 amp/=n;
 float amp1=dot(amp,amp);


 if(amp1<0.0) gl_FragColor=vec4(-amp1,0,0,1);
 else        gl_FragColor=vec4(0,amp1,0,1);
}