Fizika 2006
-
#952
Na akkor jöjjön mindenki kedvence, a fényóra
/* cc ee.c /usr/lib/libX11.a /usr/lib/libXau.a /usr/lib/libXdmcp.a -lm */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <X11/Xlib.h>
Display *dpy;
Window w;
GC gc;
#define NIL (0)
void line(float x1,float t1,float x2,float t2,int col)
{
XSetForeground(dpy,gc,col);
XDrawLine(dpy, w, gc, 250+(int)x1,500-(int)t1, 250+(int)x2,500-(int)t2 );
}
int main()
{
int i,j;
dpy = XOpenDisplay(NIL);
w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0,0, 1000, 600,0,0,0);
XSelectInput(dpy, w, StructureNotifyMask);
XMapWindow(dpy, w);
gc = XCreateGC(dpy, w, 0, NIL);
XSetForeground(dpy,gc,0x000);
for(;;) { XEvent e;XNextEvent(dpy, &e);if (e.type == MapNotify) break; }
for(i=0;i<600;i++)
line(0-250,(float)i-100,1200-250,(float)i-100,0x442200);
float tav,v2,x0,dt,s,b,x2,t2,x3,t3,x4,t4,x1,t1,v,c=1.0;
tav=120.0;
for(j=0;j<4;j++)
{
v=0.6;
if(j>=2) v=-v;
b=1.0/sqrt(1.0-v*v/(c*c));
s=20.0;
x1=0.0;if(j&1) x1=tav;
t1=0.0;
for(i=0;i<8;i++)
{
int c1=0xff0000,c2=0xffff00;
v2=c;
x0=0.0;
if(j>=2) {x0=300.0;c2=0xff0000,c1=0xffff00;}
dt=s/v2;//20
t2=t1+dt;
x2=x1+dt*c;
line(x0+x1 ,t1,x0+x2 ,t2,c1);
x3=(x1-v*t1)*b;
t3=(t1-v*x1/(c*c))*b;
x4=(x2-v*t2)*b;
t4=(t2-v*x2/(c*c))*b;
line(x0+x3 ,t3,x0+x4 ,t4,c2);
t1=t2;
x1=x2;
dt=s/v2;
t2=t1+dt;
x2=x1-dt*c;
line(x0+x1 ,t1,x0+x2 ,t2,c1);
x3=(x1-v*t1)*b;
t3=(t1-v*x1/(c*c))*b;
x4=(x2-v*t2)*b;
t4=(t2-v*x2/(c*c))*b;
line(x0+x3 ,t3,x0+x4 ,t4,c2);
t1=t2;
x1=x2;
}
}
x0=0.0;
x1=0.0;
t1=0.0;
x2=tav;
t2=tav/c;
line(x0+x1 ,t1,x0+x2 ,t2,0x00ffff);
x3=(x1-v*t1)*b;
t3=(t1-v*x1/(c*c))*b;
x0=300.0;
x4=(x2-v*t2)*b;
t4=(t2-v*x2/(c*c))*b;
line(x0+x3 ,t3,x0+x4 ,t4,0x00ffff);
x0=0.0;
x1=tav;
t1=tav/c;
x2=x1-tav;
t2=t1+tav/c;
line(x0+x1 ,t1,x0+x2 ,t2,0x00ffff);
x3=(x1-v*t1)*b;
t3=(t1-v*x1/(c*c))*b;
x0=300.0;
x4=(x2-v*t2)*b;
t4=(t2-v*x2/(c*c))*b;
line(x0+x3 ,t3,x0+x4 ,t4,0x00ffff);
XFlush(dpy);
getchar();
return 0;
}
