Hirdetés

Új hozzászólás Aktív témák

  • hexagon

    csendes tag

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>

    float sqr(float n) {return n*n;}
    float rnd() {return (float)(rand()%10000)/10000;}

    float transmit_term =M_PI/2;
    float reflect_term =M_PI;

    struct complex {float x,y;};
    void add_complex(complex *complex_num,float phase) {complex_num->x+=cos(phase);complex_num->y+=sin(phase);};
    float complex_amplitude(complex *complex_num) {return sqrt(sqr(complex_num->x)+sqr(complex_num->y));}
    int x,i;

    void quantum_eraser()
    {

    for(x=0;x<300;x++)
    {
    int photon_counter=0;

    for(i=0;i<400;i++)
    {
    float phase_a=M_PI*2*rnd();
    float phase_b=M_PI*2*rnd();
    float d1_distance=1234;
    float slit1_x=230,slit2_x=280;
    float wavelength_idler=M_PI/3.0,wavelength_signal=M_PI/1.5;
    complex amp_d0,amp_d1;
    amp_d0.x=amp_d0.y=amp_d1.x=amp_d1.y=0;

    float d0_distance=sqrt(sqr(x-slit1_x) + sqr(1000));
    add_complex(&amp_d0,phase_a + d0_distance*wavelength_signal);

    d0_distance=sqrt(sqr(x-slit2_x) + sqr(1000));
    add_complex(&amp_d0,phase_b + d0_distance*wavelength_signal);

    add_complex(&amp_d1,phase_a + d1_distance*wavelength_idler + 2*transmit_term + reflect_term);
    add_complex(&amp_d1,phase_b + d1_distance*wavelength_idler + transmit_term +2*reflect_term);

    if(sqr(complex_amplitude(&amp_d0)/2)>rnd())
    if(sqr(complex_amplitude(&amp_d1)/2)>rnd())
    photon_counter+=1;
    }
    pixel(x,300-photon_counter,255);
    }
    }

Új hozzászólás Aktív témák