float1 t,dt,angle,m=1,measure_angle;
float3 pos,spd,nor,I,B,F;
int stat[2],counter=0,c3=0,measure,B_change;
void init()
{
pos=float3(100,0,0);
angle=M_PI/2*((float)(rand()%10000))/10000.0;
spd=float3(0.0,cos(angle)*10.0,sin(angle)*10.0);
B=float3(0,0,1);
counter=0;
B_change=200000+((rand()%100)*1000+(rand()%1000));
measure=B_change+200000+(rand()%100)*1000+(rand()%1000);
}
void stern_gerl()
{
//ennyi szazalekban all at a spin down-rol up-ra a QM szerint, ha a ket magneses ter a fokban all egymashoz kepest
measure_angle=60.0;//45=14.6% 60=25% 90=50% ennyi szazalekban all at a spin down-rol up-ra
t=sin((measure_angle/2.0)*M_PI*2/360.0);
t*=t;
printf("%Lf fok %Lf \n",measure_angle,t);
dt=0.01;
init();
stat[0]=0;
stat[1]=0;
while(1)
{
pos=pos+spd*dt;
nor=normalize(pos);
pos=nor*100.0;//egy gomb feluleten mozog a pont
spd=spd-nor*dot(spd,nor);
spd=normalize(spd)*10.0;
F=cross(spd,B);//lorentz ero *e most nincs, egyszerusitett modell
spd=spd+F*dt*0.01/m;
counter++;
if(counter==measure)//impulzusmomentum iranya a magneses terhez kepest
{
I=cross(pos,spd);
t=dot(B,I);
if(t<0.0) stat[0]++;//ellentetes
else stat[1]++;//megegyezo
init();
}
else
if(counter==B_change)//magneses ter elfordul
{
angle=measure_angle*M_PI*2/360.0;
B=float3(sin(angle),0.0,cos(angle));
}
c3--;
if(c3<0)//neha statisztika kiiras
{
c3=1000000;
if(stat[1]) printf("%d/%d/%d %d %\n",stat[0],stat[1],stat[0]+stat[1],stat[0]*100/(stat[0]+stat[1]));
}
}
}