Fizika 2006
  • y3ls0
    #934
    Mielőtt felmerülne a gyanu, hogy az ábra hasraütésre készült, itt a robot, ami generálta

    /* 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 draw_lines(float x1,float y1,float t1,float x2,float y2,float t2,int col)
    {
    int i;

    XSetForeground(dpy,gc,col);
    for(i=-1;i<2;i++)
    {
    XDrawLine(dpy, w, gc, i+150+(int)x1,500-(int)t1, i+150+(int)x2,500-(int)t2 );
    XDrawLine(dpy, w, gc, i+600+(int)y1,500-(int)t1, i+600+(int)y2,500-(int)t2 );
    }
    }
    int main()
    {
    int i;

    dpy = XOpenDisplay(NIL);
    w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0,0, 800, 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; }





    float vy,dt,b,y1=0.0,y2,x2,t2,x1=0.0,t1=0.0,v=0.6,c=1.0;
    b=1.0/sqrt(1.0-v*v/(c*c));
    x2=(x1-v*t1)*b;
    t2=(t1-x1*t1/(c*c))*b;
    vy=sqrt(c*c-v*v);

    float s=50.0;//a kar hossza

    // float d=1.0/b;//lorentz contraction
    float d=1.0;//nincs


    XSetForeground(dpy,gc,0x7f3000);
    for(i=0;i<700;i++) XDrawLine(dpy, w, gc, 0,i,1000,i);





    float t=300.0;
    for(t1=0.0;t1<t;t1++) draw_lines(0.0+t1*v,0.0f,t1, 2.0*s*d+t1*v,0.0f,t1, 0xffff00);
    for(t1=0.0;t1<t;t1++) draw_lines(0.0+t1*v,-s,t1, 2.0*s*d+t1*v,s,t1, 0xffff00);


    draw_lines(0.0f,0.0f,0.0f, t*v,0.0f,t, 0);
    draw_lines(0.0f,-s,0.0f, t*v,-s,t, 0x008f8f);
    draw_lines(0.0f,s,0.0f, t*v,s,t, 0);
    draw_lines(2.0f*s*d,0.0f,0.0f,2.0f*s*d+t*v,0.0f,t,0);
    draw_lines(s*d,0.0f,0.0f, s*d+t*v,0.0f,t ,0);

    XSetForeground(dpy,gc,0x2f1000);
    for(i=0;i<300;i+=20) XDrawLine(dpy, w, gc, 0,500-i,1000,500-i);





    x1=t1=y1=0.0;
    dt=2.0*s*d/(c-v);//kek ket karnyit elore
    x2=x1+dt*c;//mozgasiranyban elore
    t2=t1+dt;//az eltelt ido
    draw_lines(x1,y1,t1,x2,y2,t2,0x0000b0);

    x1=x2;
    y1=y2;
    t1=t2;


    dt=s*d/(c+v);//kek vissza 1 karhossznyit
    x2=x1-dt*c;//ellentetes iranyban megy
    t2=t1+dt;
    draw_lines(x1,y1,t1,x2,y2,t2,0x0000b0);

    x1=x2;
    y1=y2;
    t1=t2;


    dt=s/vy;//kek oldalra 1 karnyit
    x2=x1+dt*v;//de kozben elore is megy a sarga doboz
    y2=y1-dt*vy;//oldal iranyban jobbra a vilagoskek celig
    t2=t1+dt;
    draw_lines(x1,y1,t1,x2,y2,t2,0x0000b0);

    x1=x2;
    y1=y2;
    t1=t2;






    x1=t1=y1=y2=0.0;
    dt=s*d/(c-v);//piros elore egy karnyit
    x2=x1+dt*c;
    t2=t1+dt;
    draw_lines(x1,y1,t1,x2,y2,t2,0xff0000);

    x1=x2;
    y1=y2;
    t1=t2;


    dt=s/vy;//piros oldalra 1 karnyit
    x2=x1+dt*v;//kozben elore is megy
    y2=y1+dt*vy;//balra
    t2=t1+dt;
    draw_lines(x1,y1,t1,x2,y2,t2,0xff0000);

    x1=x2;
    y1=y2;
    t1=t2;


    dt=2.0*s/vy;//piros 2 karnyit a celig
    x2=x1+dt*v;///kozbel elore is
    y2=y1-dt*vy;//balra
    t2=t1+dt;

    draw_lines(x1,y1,t1,x2,y2,t2,0xff0000);
    x1=x2;
    y1=y2;
    t1=t2;






    XFlush(dpy);
    getchar();

    return 0;
    }