1129
Neumann János, Nikola Tesla, Albert Einstein
  • szabiku
    #1129
    Ennyi belefér... kicsit elbízta magát, de majd rájön, ha akar.
  • hiper fizikus
    #1128
    Szia Szabiku !
    Ha sérteget valaki, akkor inkább ignoráld, és ne heceld ! Azaz ne etesd a trolkodókat !
  • szabiku
    #1127
    Amnéziás vagy? Elfelejtetted a jelszavad?

    >"nincs Z (mozgas) iranyu komponense sem a magneses ter vektoranak, sem az elektromos ter vektoranak."
    #Nem is kell. Én sem állítottam ilyet. Nem ezeket kvantáljuk, hanem a négyes vektorpotenciált.

    >"Csak az A negyes vektorpotencialnak."
    #Igen. És abban az irányban is kvantálni kell. Hehehe! Tökfej.

    >"jeee, igazam volt xD"
    #Lóherét! Azt sem tudod minek örülsz.. Nem érted, és csak úgy magadnak.
    Utoljára szerkesztette: szabiku, 2018.07.13. 03:31:21
  • szabiku
    #1126
    Nem égtem be, csak én nem szoktam foglalkozni a többnyire haszontalan geometriai szorzattal, úgyhogy nálam az ab kifejezés alapból a skalár szorzatot jelenti... Annyi rizsát löksz, hogy nem olvassa végig az ember, és már a felénél inkább válaszolgattam. Utána pedig kijavítottam, ahogy illik.
  • mathman
    #1125
    Ja a tetrahedron, amivel kiszamoltam a Standard Model osszes tolteset helyesen, tovabbi helyes adatokat szolgaltat.
    A negy "os" vektor bozon a B0 W1 W2 W3 megegyezik a spinjegben talalhato 4 vektorral (spinors) csak itt a B0 az ido iranyba mutat. Szoval ez a spin jeg (quantum vacuum) 4 dimenzios.
    A foton B0 es a W3 kevereke, es a Z bozon a -B0 W3 ami egyszeruen annyit jelent, hogy a Z eseten a B0 hullam visszafele halad az idoben, de elnyelodik a multban levo befagyott szupravezetoben, pont ugy, ahogy Anderson az leirta anno a szupravezeto femek eseten.
    Tobb reszletet nem irok le, mert ILYENEKNEK teljesen felesleges xD
  • mathman
    #1124
    mar az indexen beegtel, amikor kijelentetted a exterrior algebra wedge levezetesemre, hogy hibas
    aztan (mikor gondolom kijozanodtal) beismerted, hogy helyes.
    Azt sem tudod mit csinalsz xD
  • mathman
    #1123
    ezt hivjak ugy, hogy mellebeszeles.
    Mivel a fizika nyelve a matek, szamoljuk ki


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



    struct vec4 {
    double x,y,z,t;
    vec4 operator - (vec4 v) {vec4 uu;uu.x=x-v.x;uu.y=y-v.y;uu.z=z-v.z;uu.t=t-v.t;return uu;};
    vec4 operator / (double s) {vec4 uu;uu.x=x/s;uu.y=y/s;uu.z=z/s;uu.t=t/s;return uu;};

    };
    #define frand(u) (u*(double)(rand()%10000)/10000.0)



    vec4 fncA(double t,double x,double y,double z)
    {
    vec4 v4;
    double k=M_PI/180.0;
    double phase=z*k - t*k;
    v4.x=sin(phase)*100.0;
    //v4.x=0.0;
    v4.y=0.0;
    v4.z= cos(phase)*100.0;//a hullam mozgas iranya, mivel phase=z*k
    v4.t=-cos(phase)*100.0;//time

    return v4;
    }
    void testtensor()
    {
    double x,y,z,t;
    vec4 dAx,dAy,dAz,dAw;
    double dt=0.01, dx=0.01, dy=0.01, dz=0.01;
    x=frand(1000.0);
    y=frand(1000.0);
    z=frand(1000.0);
    t=frand(1000.0);


    //four gradient
    dAw=(fncA(t+dt,x ,y ,z ) - fncA(t-dt,x ,y ,z ))/(dt*2.0);
    dAx=(fncA(t ,x+dx,y ,z ) - fncA(t ,x-dx,y ,z ))/(dx*2.0);
    dAy=(fncA(t ,x ,y+dy,z ) - fncA(t ,x ,y-dy,z ))/(dy*2.0);
    dAz=(fncA(t ,x ,y ,z+dz) - fncA(t ,x ,y ,z-dz))/(dz*2.0);


    double tensorF[4][4];
    //exterior derivative Aij - Aji
    tensorF[0][0]=dAw.t - dAw.t;
    tensorF[0][1]=dAw.x - dAx.t;//Ex
    tensorF[0][2]=dAw.y - dAy.t;//Ey
    tensorF[0][3]=dAw.z - dAz.t;//Ez

    tensorF[1][0]=dAx.t - dAw.x;
    tensorF[1][1]=dAx.x - dAx.x;
    tensorF[1][2]=dAx.y - dAy.x;//Bz
    tensorF[1][3]=dAx.z - dAz.x;

    tensorF[2][0]=dAy.t - dAw.y;
    tensorF[2][1]=dAy.x - dAx.y;
    tensorF[2][2]=dAy.y - dAy.y;
    tensorF[2][3]=dAy.z - dAz.y;//Bx

    tensorF[3][0]=dAz.t - dAw.z;
    tensorF[3][1]=dAz.x - dAx.z;//By
    tensorF[3][2]=dAz.y - dAy.z;
    tensorF[3][3]=dAz.z - dAz.z;

    if(fabs(tensorF[0][3])>1e-10 || fabs(tensorF[1][2])>1e-10)
    {
    printf("E %.3f %.3f %e \n",tensorF[0][1],tensorF[0][2],tensorF[0][3]);
    printf("B %.3f %.3f %e \n",tensorF[2][3],tensorF[3][1],tensorF[1][2]);
    printf("\n");
    }
    else printf("OK\n");

    return;
    }



    int main()
    {
    for(int i=0;i<100;i++) testtensor();

    return 0;
    }



    nincs Z (mozgas) iranyu komponense sem a magneses ter vektoranak, sem az elektromos ter vektoranak.
    Csak az A negyes vektorpotencialnak.
    jeee, igazam volt xD
  • szabiku
    #1122
    cyb3rcop írta: "Pontosan ezt történik. Csak nem a longitudinális komponens ejti ki, hanem a weak isospin 3. komponense ejti ki a weak hypercharge menetirányú komponensét."
    Egy kicsit most összekombinálod a dolgokat, de amúgy értem, mit gondolsz.
    Nos kisfiam, az a lényeg, hogy ejtse ki, mert ki kell, hogy ejtse.
    Két olyan dolgot kombinálsz össze, amik bár egy helyen (dologban) csapódnak le, de mégis külön lapra tartoznak témaügyileg.
    Az egyik a tömegadós egyesített kölcsönhatáselmélet (az elektro-gyenge kölcsönhatás egyesített elmélete), ami egy mérték-térelmélet, a másik pedig a konkrétabban és szigorúbban kvantummechanika alapú kvantum-térelmélet. A kettőnek van egy "kis" konfliktusa egymással, ugyanis még a(z említett) mértéktérelmélet vektorpotenciáljai(i) a Lagrange-sűrűségben mértékinvariánsak (mint a klasszikus elektrodinamika vektorpotenciálja), addig a kvantumtérelméletben éppen az eltűnő (vektor)részecskemező(pl. foton)-tömeg tiltja meg a szokásos mértékinvarianciát (ugyanis ekkor nem tűnhet el a negyedik kanonikus impulzus). Ez egy nagyon érdekes dolog. Ezen a ponton a két irányadó részecskefizikai elmélet nincs konzisztenciában.
    Na de most nem is igazán ez a lényeg, hanem az, hogy az (általam és általad) említett kiejtés mindkét oldalról ugyanott (<-- szabadsági fok) jön létre. Viszont ezt nem írhatjuk külön elő, vagy ez miatt nem ennek megfelelően kvantálunk (pl. az elektromágneses teret csak a két transzverzális szabadsági fokra, elhagyva a longitudinális és "skalár" szabadsági fokokat), hanem ez a helyzet matematikailag automatikusan kell, hogy előálljon egy tisztességes elméletben, vagyis az elméleti alapaxiómák és a konstrukció együtteséből következően. Érdekes, hogy ebben a tekintetben (szimmetriák, és rejtett szabadsági fokok) a matematikai kép olyan nézetet vagy dolgokat is mutathat, amik valójában ekvivalensek (<-- pl. Higgs-mechanizmus eseténél) vagy (pl. longitudinális és skalár fotonállapotok -->) ellentétesen ekvivalensek, nem fizikaiak. Ilyenkor nincs igazán értelme azon vitatkozni (bár azért el lehet értelmesen filozofálgatni róla), hogy most akkor valójában ilyen vagy olyan a dolog képe, hogy abban valami valójában van vagy nincs. A lényeg az elméleti leírásban azon van, hogy a lehető legkevesebb axiomatikus kiindulásból (lehetőleg és szigorúan) toldozgatások nélkül a szerkezet által annak (automatikus) matematikájával álljon elő az összes tapasztalható eredmény. Erre a matematika igen komoly és bonyolult apparátusokat szolgáltat, ami szerintem így, a természeti valóság modellezését véve, méltán az ember legnagyobb alkotása.
  • szabiku
    #1121
    Ez az analógia egyáltalán nem ekvivalencia. A kvázi-részecske bár valódi, de mégsem olyan, mint a rendes (nem kvázi) részecske. A kvázi-részecske egy kvantumfizikai anyagháttéren (anyagban) jön létre és létezik. Ez pedig messze más dolog, mint a puszta vákuum háttéren létező részecske.
  • cyb3rcop
    #1120
    Arra nem képes, hogy elolvassa a wikipedia bejegyzést.
    "Some condensed matter systems contain effective (non-isolated) magnetic monopole quasi-particles,[5] or contain phenomena that are mathematically analogous to magnetic monopoles"
    en.wikipedia.org/wiki/Magnetic_monopole
    A spinjégben vannak olyan effektív monopólok, amelyek Dirac-stringgel vannak összekötve.
    "Experiments have found evidence for the existence of deconfined magnetic monopoles in these materials"
    en.wikipedia.org/wiki/Spin_ice
    Szerencsétlenek. Menjetek vissza játszani
  • cyb3rcop
    #1119
    "Ennyi erővel azt is állíthatnánk, hogy az elektromágneses hullámoknak van longitudinális polarizációja,"
    Pontosan ezt történik kisfiam. Csak nem a longitudinális komponens ejti ki, hanem a weak isospin 3. komponense ejti ki a weak hypercharge menetirányú komponensét.
    www.nikhef.nl/~ivov/HiggsLectureNote.pdf



    Utoljára szerkesztette: cyb3rcop, 2018.06.02. 14:11:19
  • szabiku
    #1118
    #1111: "... még az előbbi négyes-vektorhullám esetében egy polarizációs egységvektor, mely a négyesimpulzus irányába mutat, vagy pontosabban fogalmazva skaláris szorzatuk nulla."
    Ez azért érdekes nem??
  • Inquisitor
    #1117
    Time Crystals to Tetraquarks: Quantum Physics in 2017
    2017 jelentősebb kvantum fizikai eredményei. A lapozgatós résznél csak egy rövid kedvcsinálót találni, a kék linkeken lehet elérni az eredeti cikkeket. Hát van benne pár meredek cucc. Az én kedvencem ez itt:
    A time crystal

    Time crystals sound like talismans from a fantasy novel, but they're actually real quantum objects, generated for the first time in 2017. A time crystal is a unique state of matter, a group of ions lashed together with quantum links such that they shake, or oscillate, together at a repeating period. As long as the conditions they need to exist remain, time crystals become locked into a single moment in time; no matter how much energy gets pumped into them, they don't heat up or increase in entropy — effectively suspending the laws of thermodynamics as they're typically understood.
  • szabiku
    #1116
    Szia Hiper fizikus!
    Szerintem a mágneses monopólus nem létezik, de azért igen érdekes annak fejtegetése, hogy hátha esetleg mégis. Egyrészt mert lehet vele tanulni, ugyanis elég tüzetesen át kell rágni hozzá a klasszikus elektrodinamikát (amivel szerintem az ellentmondásos), utána meg a részecskefizika mértéktérelméletét is, nem kis szinten, ugyanis a komolyabb monopólus elméletek szimmetriasértéses mértéktérelméletek, de szerintem végül ezek is problémásak az előbbihez hasonlóan. Nem véletlen, hogy idáig egy mágneses monopólust sem találtunk még. Mostanában megint foglalkoztam vele egy kicsit: http://forum.szkeptikus.hu/viewtopic.php?f=8&t=943&start=195
    (Neem )
  • hiper fizikus
    #1115
    Szia Szabiku!
    A link ajánlóidat böngészve felfedeztem egy kis PDF cikket a mágneses monopólusról, mármint azt hogy a hiteles tudományos berkekben mit hordanak össze róla. Arra lennék kíváncsi, hogy mi értelme van ennek az egésznek a mágneses monopólusnak, mert én is kacérkodtam vele, de olyan hihetetlenül elképesztő?

    Ugye avval nem hibáztam, hogy a legyengülésemről említést tettem?

    Utoljára szerkesztette: hiper fizikus, 2017.12.15. 15:55:07
  • szabiku
    #1114
    neyoo írta: "Az elteres:
    megvaltoztak az amplitudok:
    return fi*0.5;
    return A*0.866;
    es elfordult a vektorpotencial forgasi tengelye
    float rotang=acos(0.5/0.866);
    vec3 A=Xdir*sin(phase);
    A+=Tdir*cos(phase)*cos(rotang);
    A+=Ydir*cos(phase)*sin(rotang);
    A forgatasi szog az igazan erdekes.
    http://hyperphysics.phy-astr.gsu.edu/hbase/spin.html
    sqrt(3)/2 = 0.866
    Hogyan jon ide az elektron spinje?
    Es hol a sqrt(2) amit a fotonrol szolo wikin olvasunk?
    Nos van itt egy haromszog a haladasi iranyba. Az oldalainak hossza
    Hbar *sqrt(1)
    Hbar *sqrt(2)
    Hbar *sqrt(3)"
    neyoo írta: "Amennyiben ragaskodunk ahhoz, hogy a hypercharge es a weak isospin csatolasa 0.5 0.866 aranyu, akkor a menetiranyra merolegesen jobbra vagy balra forgo vektorokat kapunk. Erdekes modon a fotonnak pont ez a ket allapota lehetseges."

    Ezek az arányok rögzítettek, ha a nulla tömegű fotonra akarunk jutni. Szóval ezt nem a természet választotta, hanem ez a célszerű (azaz tulajdonságilag jól elkülönülő) részecskeképhez vezető felbontáshoz kell. Ennek nincs köze ahhoz a spinhez, amit a részecskéknek tulajdonítanak. Viszont mind a fermion spin ábrázolásához, és mind a W, Z (, A, B) bozonok egybefoglalt ábrázolásához, a Pauli-féle mátrixok kellenek, és könnyen előfordul, hogy mindkét esetben felmerül a (gyök 3)/2 szám. Szerintem az összevonatkoztatásod nem O.K.
    Utoljára szerkesztette: szabiku, 2017.12.09. 03:41:57
  • hiper fizikus
    #1113
    Szia Neyoo!
    Tetszik amiket írsz, csak annyit szeretnék megjegyezni hozzájuk, hogy ha hosszabb részt teszel be a hozzászólásodba, akkor azt légyszíves tedd SPOILER-ba. Ez a kifogás csak formális szeplő, nem érinti a tartalmaidat.
  • szabiku
    #1112
    Néztem a csillószimulátor programjaidat, hát nem vagyok tőle elájulva.
    Alább már minden információt megadtam.
    Gondold át újra ezeket a "spin-skalár" elképzeléseidet, az utóbbi hozzászólásaim alapján.
    Nem vagy egy jedi, de azért haloványan érzek benned némi erőt...

    neyoo: :szabiku
  • szabiku
    #1111
    neyoo írta: "Tehat az elektromagneses ter egy skalar potencial es egy vektorpotencial kevereke."
    Szóval ezt felejtsd el, vagy inkább tudd, hogy ezek a megnevezések a relativitáselméletet mellőző felfogásból lettek hagyományszerűen átemelve. Az elektrodinamika vektorpotenciálja egy négyesvektor, aminek a fenti két része a téridőben nem (négyes)vektor és nem (négyes)skalár.

    Egy könyvben olvastam olyat is, hogy a négyes polarizációs vektor időszerű (longitudinális) komponensét skalárpolarizációnak is szokták nevezni, DE ez is egyrészt hagyományőrző elnevezés, VALAMINT másrészt rejtve CSAK úgy érti, hogy a térbeli forgatásokkal szemben skalárként viselkedő. Eléggé megtévesztőek ezek a szóhiányos (vagy magyarázó szöveghiányos) kevert elnevezések, ugyanis az említett (négyes értelemben hibásan elnevezett) "skalárpolarizáció" komponens nyilván nem négyesskalár, és nem is skalárhullám longitudinális polarizációját jelenti.
    Ha elgondolunk egy négyes-skalárhullámot, akkor annak polarizációjáról (mint az előbbi négyes-vektorhullám esetében) értelmes beszélni, és ekkor mivel ez egy longitudinális hullám, a polarizációja egy longitudinális polarizációt jelent, ami valóban (négyes)skalárpolarizáció. Az ehhez tartozó irányultságot leíró mennyiség a hullám skalár jellege miatt egyszerűen egy 1-es szorzófaktor, még az előbbi négyes-vektorhullám esetében egy polarizációs egységvektor, mely a négyesimpulzus irányába mutat, vagy pontosabban fogalmazva skaláris szorzatuk nulla. (Tenzor- és spinorhullámok is hasonlóan...)
  • szabiku
    #1110
    neyoo írta: "csak ugy lehet a menetiranyra merolegesen rezgo hullamot letrehozni, ha ez a vektor forog. Tehat ez egy spin-hullam, ami egy p-hullamhoz kapcsolodott."
    neyoo írta: "Ha ebben a mezoben egy hullam terjed, akkor az egy osszecsatolodott skalarmezoben terjedo p-wave es a vektormezoben terjedo spinhullam. Csak igy lehet a haladasi iranyra meroleges elektromos es magneses vektorokat kapni, amelyek nem masok, mint az mezo elso derivaltjai.
    "The name P-wave can stand for either pressure wave "
    en.wikipedia.org/wiki/P-wave"
    Hibásan kevered ide a skalár nyomáshullámszerűséget. Ami négyesskalár, az hármasskalár is, de ez fordítva általában nem igaz. (Lásd pl. az energia.)
    A négyes vektorpotenciálnak tulajdonképpen nincsen "skalárpotenciál" része, az csak a relativitáselméletet mellőző felfogásban van annak nevezve (tulajdonképpen hibásan), de a fogalmat (tulajdonképpen hibásan) átemeltük.
    A spin(or)hullámot valószínűleg ebből a hibából kevered ide, de nyilván annak sincs itt helye.
  • szabiku
    #1109
    Igazából nem is csupán hasonlatos a példa, hanem ugyan arról van szó, csak más szemszögből.
  • szabiku
    #1108
    neyoo írta: "Szoval igen is csatolva vannak egymashoz, de a csatolas olyen, hogy eltunteti a mozgas iranyu komponenset a fotonnak, igy az haladhat fenysebesseggel."
    Kontrázok: Na de mivel a matematikai bűvészkedésből mégis úgy jön ki az elektromágneses tér vektorpotenciálja, hogy nincsen a Lagrange-sűrűségben a Higgs-mezővel való kölcsönhatását jelentő tag, és ezzel összhangban tömegtag, ezért nincsenek csatolódva egymáshoz.

    Egy hasonlatos példa: Ennyi erővel azt is állíthatnánk, hogy az elektromágneses hullámoknak van longitudinális polarizációja, csak éppen azt mindig kiejti a polarizációs vektor időszerű komponense...
  • szabiku
    #1107
    neyoo írta: "Szeretem a forumokat. Ugyan azt elmondja a csavo amit en, csak kiforgatja a szavakat."
    Én csak helyesbítettem. A fizika megérdemel ennyit.

    neyoo írta: "Ugyes vagy neked van igazad."
    Na ugye.

    neyoo írta: "Vagy egy hasonlo emberke, az sajat forumot keszitett, hogy mindig neki legyen igaza. Mekkora gaz."
    Kire gondolsz? Kíváncsi vagyok...
    Utoljára szerkesztette: szabiku, 2017.12.01. 21:58:13
  • szabiku
    #1106
    Berakhatnád a program kódjaidat egy ilyen alá:

  • neyoo
    #1104
    Szeretem a forumokat. Ugyan azt elmondja a csavo amit en, csak kiforgatja a szavakat.
    Ugyes vagy neked van igazad. Vagy egy hasonlo emberke, az sajat forumot keszitett, hogy mindig neki legyen igaza.
    Mekkora gaz.
  • neyoo
    #1103
    A megoldas jo, csak szamolasi pontatlansag adta a mozgas iranyu komponens hibat.
    Szoval az utobbi megoldas a helyes.


    <!doctype html>
    <html>
    <body>
    <canvas width = "570" height = "570" id = "my_Canvas"></canvas>

    <script>

    /*============= Creating a canvas ======================*/
    var canvas = document.getElementById('my_Canvas');
    gl = canvas.getContext('experimental-webgl');

    /*========== Defining and storing the geometry ==========*/

    var scl=10;
    var vertices=new Array(32*32*32*2*3),i=0,j=0;
    var colors=new Array(32*32*32*2*3);

    for(z=0;z<32;z++)
    for(y=0;y<32;y++)
    for(x=0;x<32;x++)
    if(x==0 || y==0 || z==0)
    {
    vertices[i++]=x/scl;
    vertices[i++]=y/scl;
    vertices[i++]=z/scl;

    vertices[i++]=x/scl;
    vertices[i++]=y/scl;
    vertices[i++]=z/scl;

    colors[j++]=0;
    colors[j++]=0;
    colors[j++]=0;
    colors[j++]=1;
    colors[j++]=1;
    colors[j++]=1;
    }

    // Create and store data into vertex buffer
    var vertex_buffer = gl.createBuffer ();
    gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

    // Create and store data into color buffer
    var color_buffer = gl.createBuffer ();
    gl.bindBuffer(gl.ARRAY_BUFFER, color_buffer);
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);

    /*=================== SHADERS =================== */

    var vertCode = 'attribute vec3 position;'+
    'uniform mat4 Pmatrix;'+
    'uniform mat4 Vmatrix;'+
    'uniform mat4 Mmatrix;'+
    'uniform float Mtime2;'+
    'uniform int Mmode;'+
    'uniform vec3 Mpencolor;'+
    'attribute vec3 color;'+
    'varying vec3 vColor;'+
    'float fncFI(float x,float y,float z){'+
    ' vec3 Pos=vec3(x,0.0,0.0);'+
    ' float dist=length(Pos);'+
    ' float k=3.1415926/2.0;'+
    ' float phase=dist*k - Mtime2;'+
    ' float fi=-cos(phase);'+
    ' return fi*0.5;'+
    '}'+
    'vec3 fncA(float x,float y,float z,float delta){'+
    ' vec3 Pos=vec3(x,0.0,0.0);'+
    ' float dist=length(Pos);'+
    ' float k=3.1415926/2.0;'+
    ' float phase=(dist + delta)*k -Mtime2;'+
    ' vec3 Tdir=normalize(Pos);'+
    ' vec3 Xdir=cross(Tdir,Tdir.yzx);'+
    ' vec3 Ydir=normalize(cross(Xdir,Tdir));'+
    ' Xdir =normalize(cross(Tdir,Ydir));'+
    ' float rotang=acos(0.5/0.866);'+
    ' vec3 A=Xdir*sin(phase);'+
    ' A+=Tdir*cos(phase)*cos(rotang);'+
    ' A+=Ydir*cos(phase)*sin(rotang);'+
    ' return A*0.866;'+
    '}'+
    'vec3 fncEgrad(float x,float y,float z){'+
    ' float dx=0.0001;'+
    ' float A=fncFI(x,y,z);'+
    ' float Adx=fncFI(x+dx,y,z);'+
    ' float Ady=fncFI(x,y+dx,z);'+
    ' float Adz=fncFI(x,y,z+dx);'+
    ' vec3 dA=(fncA(x,y,z,0.0)-fncA(x,y,z,-dx))/dx;'+
    ' vec3 gradFI=vec3((Adx-A)/dx,(Ady-A)/dx,(Adz-A)/dx);'+
    ' return -gradFI -dA;'+
    '}'+
    'vec3 curlA(float x,float y,float z){'+
    ' float dx=0.0001;'+
    ' vec3 dAx=(fncA(x+dx,y,z,0.0) - fncA(x-dx,y,z,0.0))/(2.0*dx);'+
    ' vec3 dAy=(fncA(x,y+dx,z,0.0) - fncA(x,y-dx,z,0.0))/(2.0*dx);'+
    ' vec3 dAz=(fncA(x,y,z+dx,0.0) - fncA(x,y,z-dx,0.0))/(2.0*dx);'+
    ' vec3 curl=-vec3((dAz.y)-(dAy.z),'+
    ' (dAx.z)-(dAz.x),'+
    ' (dAy.x)-(dAx.y));'+
    ' return curl;'+
    '}'+
    'void main(void) { '+
    ' float scalef=0.22;'+
    ' float x=position.x;'+
    ' float y=position.y;'+
    ' float z=position.z;'+
    ' vec3 dir;'+
    ' if(Mmode==1) dir=color*fncEgrad(x,y,z);'+
    ' if(Mmode==2) dir=color*curlA(x,y,z);'+
    ' if(Mmode==3) dir=color*fncA(x,y,z,0.0);'+
    // ' vec3 tang=normalize(vec3(x,0.0,0.0));'+
    // ' dir=tang*dot(tang,dir);'+
    ' gl_Position = Pmatrix*Vmatrix*Mmatrix*vec4(position+dir*scalef, 1.0);'+
    ' vColor=Mpencolor;'+
    '}';

    var fragCode = 'precision mediump float;'+
    'varying vec3 vColor;'+
    'void main(void) {'+
    ' gl_FragColor = vec4(vColor, 1.0);'+
    '}';

    var vertShader = gl.createShader(gl.VERTEX_SHADER);
    gl.shaderSource(vertShader, vertCode);
    gl.compileShader(vertShader);

    var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
    gl.shaderSource(fragShader, fragCode);
    gl.compileShader(fragShader);

    var shaderprogram = gl.createProgram();
    gl.attachShader(shaderprogram, vertShader);
    gl.attachShader(shaderprogram, fragShader);
    gl.linkProgram(shaderprogram);

    /*======== Associating attributes to vertex shader =====*/
    var _Pmatrix = gl.getUniformLocation(shaderprogram, "Pmatrix");
    var _Vmatrix = gl.getUniformLocation(shaderprogram, "Vmatrix");
    var _Mmatrix = gl.getUniformLocation(shaderprogram, "Mmatrix");
    var _Mtime2 = gl.getUniformLocation(shaderprogram, "Mtime2");
    var _Mpencolor = gl.getUniformLocation(shaderprogram, "Mpencolor");
    var _Mmode = gl.getUniformLocation(shaderprogram, "Mmode");


    gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
    var _position = gl.getAttribLocation(shaderprogram, "position");
    gl.vertexAttribPointer(_position, 3, gl.FLOAT, false,0,0);
    gl.enableVertexAttribArray(_position);

    gl.bindBuffer(gl.ARRAY_BUFFER, color_buffer);
    var _color = gl.getAttribLocation(shaderprogram, "color");
    gl.vertexAttribPointer(_color, 3, gl.FLOAT, false,0,0) ;
    gl.enableVertexAttribArray(_color);

    gl.useProgram(shaderprogram);


    /*==================== MATRIX ====================== */

    function get_projection(angle, a, zMin, zMax) {
    var ang = Math.tan((angle*.5)*Math.PI/180);//angle*.5
    return [
    0.5/ang, 0 , 0, 0,
    0, 0.5*a/ang, 0, 0,
    0, 0, -(zMax+zMin)/(zMax-zMin), -1,
    0, 0, (-2*zMax*zMin)/(zMax-zMin), 0
    ];
    }

    var proj_matrix = get_projection(40, canvas.width/canvas.height, 1, 100);
    var mo_matrix = [ 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 ];
    var view_matrix = [ 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 ];

    view_matrix[14] = view_matrix[14]-6;

    /*================= Mouse events ======================*/

    var AMORTIZATION = 0.95;
    var drag = false;
    var old_x, old_y;
    var dX = 0, dY = 0;

    var mouseDown = function(e) {
    drag = true;
    old_x = e.pageX, old_y = e.pageY;
    e.preventDefault();
    return false;
    };

    var mouseUp = function(e){
    drag = false;
    };

    var mouseMove = function(e) {
    if (!drag) return false;
    dX = (e.pageX-old_x)*2*Math.PI/canvas.width,
    dY = (e.pageY-old_y)*2*Math.PI/canvas.height;
    THETA+= dX;
    PHI+=dY;
    old_x = e.pageX, old_y = e.pageY;
    e.preventDefault();
    };

    canvas.addEventListener("mousedown", mouseDown, false);
    canvas.addEventListener("mouseup", mouseUp, false);
    canvas.addEventListener("mouseout", mouseUp, false);
    canvas.addEventListener("mousemove", mouseMove, false);

    /*=========================rotation================*/

    function rotateX(m, angle) {
    var c = Math.cos(angle);
    var s = Math.sin(angle);
    var mv1 = m[1], mv5 = m[5], mv9 = m[9];

    m[1] = m[1]*c-m[2]*s;
    m[5] = m[5]*c-m[6]*s;
    m[9] = m[9]*c-m[10]*s;

    m[2] = m[2]*c+mv1*s;
    m[6] = m[6]*c+mv5*s;
    m[10] = m[10]*c+mv9*s;
    }

    function rotateY(m, angle) {
    var c = Math.cos(angle);
    var s = Math.sin(angle);
    var mv0 = m[0], mv4 = m[4], mv8 = m[8];

    m[0] = c*m[0]+s*m[2];
    m[4] = c*m[4]+s*m[6];
    m[8] = c*m[8]+s*m[10];

    m[2] = c*m[2]-s*mv0;
    m[6] = c*m[6]-s*mv4;
    m[10] = c*m[10]-s*mv8;
    }

    /*=================== Drawing =================== */

    var THETA = 0,
    PHI = 0;
    var time_old = 0;

    var animate = function(time) {
    var dt = time-time_old;

    if (!drag) {
    dX *= AMORTIZATION, dY*=AMORTIZATION;
    THETA+=dX, PHI+=dY;
    }

    //set model matrix to I4

    mo_matrix[0] = 1, mo_matrix[1] = 0, mo_matrix[2] = 0, mo_matrix[3] = 0,
    mo_matrix[4] = 0, mo_matrix[5] = 1, mo_matrix[6] = 0, mo_matrix[7] = 0,
    mo_matrix[8] = 0, mo_matrix[9] = 0, mo_matrix[10] = 1, mo_matrix[11] = 0,
    mo_matrix[12] = 0, mo_matrix[13] = 0, mo_matrix[14] = 0, mo_matrix[15] = 1;

    rotateY(mo_matrix, THETA);
    rotateX(mo_matrix, PHI);

    time_old = time;
    gl.enable(gl.DEPTH_TEST);

    // gl.depthFunc(gl.LEQUAL);

    gl.clearColor(0.0, 0.0, 0.0, 0.9);
    gl.clearDepth(1.0);
    gl.viewport(0.0, 0.0, canvas.width, canvas.height);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

    gl.uniformMatrix4fv(_Pmatrix, false, proj_matrix);
    gl.uniformMatrix4fv(_Vmatrix, false, view_matrix);
    gl.uniformMatrix4fv(_Mmatrix, false, mo_matrix);

    gl.uniform1f(_Mtime2, time*1e-3);
    gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);

    if( 1)// 1 vs 0
    {
    gl.uniform3f(_Mpencolor, 0.0,0.0,1.0);//blue fncEgrad = E field
    gl.uniform1i(_Mmode, 1);
    gl.drawArrays(gl.LINES, 0, 32*32*2*3);

    gl.uniform3f(_Mpencolor, 1.0,0.0,0.0);//red curlA = B field
    gl.uniform1i(_Mmode, 2);
    gl.drawArrays(gl.LINES, 0, 32*32*2*3);
    }else{
    gl.uniform3f(_Mpencolor, 1.0,1.0,0.0);//yellow fncA = vector potential
    gl.uniform1i(_Mmode, 2);
    gl.drawArrays(gl.LINES, 0, 32*32*2*3);
    }
    window.requestAnimationFrame(animate);
    }

    animate(0);

    </script>

    </body>
    </html>

  • szabiku
    #1102
    neyoo írta: "Nezd ez mar nagyon filozofia jellegu okfejtes. Ha a foton ket allapot keverekeben van, akkor az nem alapallapotu foton.
    Akkor megfelel neked ha azt mondom, hogy nincs linearisan polarizalt alap allapota a fotonnak?"
    Nem. Egyáltalán nem filozofikus. Ez alapvető kvantummechanika.
    Már mondtam, hogy nem keverékről van szó, hanem szuperpozícióról. A kettő egyáltalán nem ugyan az.
    Az alapállapot is mást jelent a kvantummechanikában, mint amire most használod.
    Úgy felel meg, ha azt mondod, hogy ha az olyan állapotokat tekintjük, amiben a fotonnak a "spinje" (vagy impulzusmomentuma, helicitása) határozott értéket vesz fel, akkor ebbe nem tartozik bele a lineárisan polarizált állapota, hanem csak a cirkulárisan polarizált.
    Ennek ellenkezője:
    Ha az olyan állapotokat tekintjük, amiben a fotonnak a "spinje" (vagy impulzusmomentuma, helicitása) nem vesz fel határozott értéket, akkor ebbe nem tartozik bele a cirkulárisan polarizált állapota, hanem csak a lineárisan polarizált.
  • neyoo
    #1101
    Egyeb irant meg nincs vege. Ugyanis az elektromos ter mozgas iranyu komponense ugyan eltunt, de a magneses vektore meg nem. Ez a kovetkezo lepes.
  • neyoo
    #1100
    Nezd ez mar nagyon filozofia jellegu okfejtes. Ha a foton ket allapot keverekeben van, akkor az nem alapallapotu foton.
    Akkor megfelel neked ha azt mondom, hogy nincs linearisan polarizalt alap allapota a fotonnak?

    Mas tema. Ugye mindenhol ugy irjak, hogy az elektromagneses-ter nincs csatolva a Higgs-mezohoz. Hogy ez mennyire felrevezeto mondat, azt nagyon egyszeru meglatni.
    en.wikipedia.org/wiki/Weak_hypercharge
    A tablazatbol kiolvashato, hogy a Higgs toltese 1 Y hypercharge es 0.5 T3 a weak isospin 3. komponense.
    Nos a foton mezo ugyan ennek a ket toltesnek a kevereke.
    en.wikipedia.org/wiki/Standard_Model_(mathematical_formulation)#Bosons
    A B0 a weak hypercharge kozvetitoje volt a simmetria serulese elott, a W3 a weak isospin 3, komponense.
    Szoval igen is csatolva vannak egymashoz, de a csatolas olyen, hogy eltunteti a mozgas iranyu komponenset a fotonnak, igy az haladhat fenysebesseggel. Ugyanis a tomeg nem mas, mint a rezges mozgas iranyu komponense, Hiszen olyan nem lehet fenysebessegnel. Ez a Lorentz transzformaciobol kovetkezik.
    Errol Susskind is beszel valahol, azt hiszem a Higgs mezorol szolo videojaban.
  • szabiku
    #1099
    "De ez nem jelenti azt, hogy van olyan foton."
    Hmm...
    "Nincs nulla spinu foton, mert az skalar bozon lenne. A foton vektor bozon, mint a Z es a W.
    A vektor pedig annyit jelent, hogy van spinje."
    Nem. (Ez ennél jóval bonyolultabb...) Csupán azt jelenti, hogy az egyrészecske (tehát maga a részecske alapvetően) milyen hullámfüggvénnyel, vagy milyen jellegű mennyiséggel írható le. (Pl. kétfotonos rendszernek már van skalár összetevője is, melyhez nulla "spin"-t lehet rendelni...)

    Nézeted szerint viszont felmerül a kérdés, hogy a lineáris polarizációjú szuperpozíciós állapot létezik-e egyfoton esetén. Szerintem és a kísérletek szerint igen. (Szuperpozíciós állapotról van szó ugye, és nem pedig kevert állapotról, mert az nem is a kvantummechanika tárgykörébe tartozik...) Annak ellenére, hogy a foton vektor részecske, még teljesen érvényes állapot rá a lineárisan polarizált állapot. Ez pedig szerintem kielégítő arra, hogy létezik ilyen foton. Az egy másik kérdés, hogy ebben a lineárisan polarizált állapotban határozott-e a "spinje" (vagy impulzusmomentuma, helicitása). A válasz az, hogy nem.

    Tehát azt gondold át, hogy álláspontod szerint miért ne létezhetne olyan foton, melynek nincs határozott "spinje" (vagy impulzusmomentuma, helicitása). Vagy egyszerűbben mondva, szerinted miért ne létezhetne lineárisan polarizált foton.
  • szabiku
    #1098
    neyoo írta: "Szoval a vektor potencial komponense nezhet a menetiranyba, de a skalarpotencial eltunteti annak az elso derivaltjat"
    OK. ennek rosszallását elszúrtam lentebb, mert a skalárpotenciál nulla értékének választása mellett gondolkodtam. (Ahogyan azt választják az EM-tér kvantálásánál...)
  • neyoo
    #1097
    Igen, a jelenlegi kvantum fizika megengedi mindket bazist. Felepitheted ugy is, hogy a ket linearisan polarizalt allapot az alapallapot. De ez nem jelenti azt, hogy van olyan foton. Nincs nulla spinu foton, mert az skalar bozon lenne. A foton vektor bozon, mint a Z es a W.
    A vektor pedig annyit jelent, hogy van spinje.
  • neyoo
    #1096
    "A négyes hullámszám vektor négyzete"
    Igy igaz. Semmifele hullamkomponens nincs menetiranyba. Ezt lathatod a szimulacioban. Eltunt.
    Ezt igazabol ugyan az okozza, mint ami tomeget ad a Z bozonnak, csak a fazis ellentetes. Ezt irja le a Weinberg szog.
    A skalarpotencial valojaban a hypercharge / hipertolteshez kapcsolhato. Elvileg az egy vektormezo, de amennyiben az idodimenzio fele mutat, mi egy skalarmezonek hisszuk azt. Ehhez kapcsolodik a skalar Higgs mezo is, hiszen annak hipertoltese van.
    A vektor potencial viszont a weak isospinhez kapcsolodik. Mint lathato, csak ugy lehet a menetiranyra merolegesen rezgo hullamot letrehozni, ha ez a vektor forog. Tehat ez egy spin-hullam, ami egy p-hullamhoz kapcsolodott.
    Ez pont olyasmi, mint amit Anderson leirt a szupravezetokkel kapcsolatban.
    Es mint olvashattunk, Higgs onnan szedte az egesz mechanizmust.
  • szabiku
    #1095
    Na de az éppen ugyan olyan jogú állapot, mint a cirkuláris polarizációs állapot, ugyanis az meg két lineárisan polarizált állapot szuperpozíciója. Nem??
  • neyoo
    #1094
    "Úgy gondolod, hogy lineárisan polarizált foton nincs?"
    Nem en gondolom ezt, hanem nincs. Ezt irja a wiki, ezt mondjak az osszes youtube eloadason / lecture ezt irja az osszes konyv. A linearisan polarizalt foton a ket allapot szuperpoziciojaban van.
    Roviden ket iranyba forog egyszerre egy idoben.
  • szabiku
    #1093
    neyoo írta: "Szoval a vektor potencial komponense nezhet a menetiranyba"
    Ez nem lehet. A négyes hullámszám vektor négyzete a vákuumban terjedő fényre nulla. Így csak transzverzális polarizáció lehetséges, longitudinális nem.
    Utoljára szerkesztette: szabiku, 2017.11.30. 20:22:42
  • neyoo
    #1092
    Csak nvidia gyorsitot hasznalok haha
  • neyoo
    #1091
    Az elteres:
    megvaltoztak az amplitudok:
    return fi*0.5;
    return A*0.866;
    es elfordult a vektorpotencial forgasi tengelye
    float rotang=acos(0.5/0.866);
    vec3 A=Xdir*sin(phase);
    A+=Tdir*cos(phase)*cos(rotang);
    A+=Ydir*cos(phase)*sin(rotang);
    A forgatasi szog az igazan erdekes.
    http://hyperphysics.phy-astr.gsu.edu/hbase/spin.html
    sqrt(3)/2 = 0.866
    Hogyan jon ide az elektron spinje?
    Es hol a sqrt(2) amit a fotonrol szolo wikin olvasunk?
    Nos van itt egy haromszog a haladasi iranyba. Az oldalainak hossza
    Hbar *sqrt(1)
    Hbar *sqrt(2)
    Hbar *sqrt(3)

    reduced Planck constant
    en.wikipedia.org/wiki/Planck_constant
  • szabiku
    #1090
    neyoo írta: "Azert nem irok ekezettel, mert lelassit. Csak ugy mondom..."
    Hát igen fel vagy pörögve, az már feltűnt...
    Nem szedsz netán valami gyorsítót?
  • neyoo
    #1089
    es a megoldas


    <!doctype html>
    <html>
    <body>
    <canvas width = "570" height = "570" id = "my_Canvas"></canvas>

    <script>

    /*============= Creating a canvas ======================*/
    var canvas = document.getElementById('my_Canvas');
    gl = canvas.getContext('experimental-webgl');

    /*========== Defining and storing the geometry ==========*/

    var scl=10;
    var vertices=new Array(32*32*32*2*3),i=0,j=0;
    var colors=new Array(32*32*32*2*3);

    for(z=0;z<32;z++)
    for(y=0;y<32;y++)
    for(x=0;x<32;x++)
    if(x==0 || y==0 || z==0)
    {
    vertices[i++]=x/scl;
    vertices[i++]=y/scl;
    vertices[i++]=z/scl;

    vertices[i++]=x/scl;
    vertices[i++]=y/scl;
    vertices[i++]=z/scl;

    colors[j++]=0;
    colors[j++]=0;
    colors[j++]=0;
    colors[j++]=1;
    colors[j++]=1;
    colors[j++]=1;
    }

    // Create and store data into vertex buffer
    var vertex_buffer = gl.createBuffer ();
    gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

    // Create and store data into color buffer
    var color_buffer = gl.createBuffer ();
    gl.bindBuffer(gl.ARRAY_BUFFER, color_buffer);
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);

    /*=================== SHADERS =================== */

    var vertCode = 'attribute vec3 position;'+
    'uniform mat4 Pmatrix;'+
    'uniform mat4 Vmatrix;'+
    'uniform mat4 Mmatrix;'+
    'uniform float Mtime2;'+
    'uniform int Mmode;'+
    'uniform vec3 Mpencolor;'+
    'attribute vec3 color;'+
    'varying vec3 vColor;'+
    'float fncFI(float x,float y,float z){'+
    ' vec3 Pos=vec3(x,y,z);'+
    ' float dist=length(Pos);'+
    ' float k=3.1415926/1.0;'+
    ' float phase=dist*k - Mtime2;'+
    ' float fi=-cos(phase);'+
    ' return fi*0.5;'+
    '}'+
    'vec3 fncA(float x,float y,float z,float delta){'+
    ' vec3 Pos=vec3(x,y,z);'+
    ' float dist=length(Pos);'+
    ' float k=3.1415926/1.0;'+
    ' float phase=(dist + delta)*k -Mtime2;'+
    ' vec3 Tdir=normalize(Pos);'+
    ' vec3 Xdir=cross(Tdir,vec3(0.0,1.0,0.0));'+
    ' vec3 Ydir=normalize(cross(Xdir,Tdir));'+
    ' Xdir =normalize(cross(Tdir,Ydir));'+
    ' float rotang=acos(0.5/0.866);'+
    ' vec3 A=Xdir*sin(phase);'+
    ' A+=Tdir*cos(phase)*cos(rotang);'+
    ' A+=Ydir*cos(phase)*sin(rotang);'+
    ' return A*0.866;'+
    '}'+
    'vec3 fncEgrad(float x,float y,float z){'+
    ' float dx=0.001;'+
    ' float A=fncFI(x,y,z);'+
    ' float Adx=fncFI(x+dx,y,z);'+
    ' float Ady=fncFI(x,y+dx,z);'+
    ' float Adz=fncFI(x,y,z+dx);'+
    ' vec3 dA=(fncA(x,y,z,0.0)-fncA(x,y,z,-dx))/dx;'+
    ' vec3 gradFI=vec3((Adx-A)/dx,(Ady-A)/dx,(Adz-A)/dx);'+
    ' return -gradFI -dA;'+
    '}'+
    'vec3 curlA(float x,float y,float z){'+
    ' float dx=0.001;'+
    ' vec3 dAx=(fncA(x+dx,y,z,0.0) - fncA(x-dx,y,z,0.0))/(2.0*dx);'+
    ' vec3 dAy=(fncA(x,y+dx,z,0.0) - fncA(x,y-dx,z,0.0))/(2.0*dx);'+
    ' vec3 dAz=(fncA(x,y,z+dx,0.0) - fncA(x,y,z-dx,0.0))/(2.0*dx);'+
    ' vec3 curl=-vec3((dAz.y)-(dAy.z),'+
    ' (dAx.z)-(dAz.x),'+
    ' (dAy.x)-(dAx.y));'+
    ' return curl;'+
    '}'+
    'void main(void) { '+
    ' float scalef=0.07;'+
    ' float x=position.x;'+
    ' float y=position.y;'+
    ' float z=position.z;'+
    ' vec3 dir;'+
    ' if(Mmode==1) dir=color*fncEgrad(x,y,z);'+
    ' if(Mmode==2) dir=color*curlA(x,y,z);'+
    ' if(Mmode==3) dir=color*fncA(x,y,z,0.0);'+
    ' gl_Position = Pmatrix*Vmatrix*Mmatrix*vec4(position+dir*scalef, 1.0);'+
    ' vColor=Mpencolor;'+
    '}';

    var fragCode = 'precision mediump float;'+
    'varying vec3 vColor;'+
    'void main(void) {'+
    ' gl_FragColor = vec4(vColor, 1.0);'+
    '}';

    var vertShader = gl.createShader(gl.VERTEX_SHADER);
    gl.shaderSource(vertShader, vertCode);
    gl.compileShader(vertShader);

    var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
    gl.shaderSource(fragShader, fragCode);
    gl.compileShader(fragShader);

    var shaderprogram = gl.createProgram();
    gl.attachShader(shaderprogram, vertShader);
    gl.attachShader(shaderprogram, fragShader);
    gl.linkProgram(shaderprogram);

    /*======== Associating attributes to vertex shader =====*/
    var _Pmatrix = gl.getUniformLocation(shaderprogram, "Pmatrix");
    var _Vmatrix = gl.getUniformLocation(shaderprogram, "Vmatrix");
    var _Mmatrix = gl.getUniformLocation(shaderprogram, "Mmatrix");
    var _Mtime2 = gl.getUniformLocation(shaderprogram, "Mtime2");
    var _Mpencolor = gl.getUniformLocation(shaderprogram, "Mpencolor");
    var _Mmode = gl.getUniformLocation(shaderprogram, "Mmode");


    gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
    var _position = gl.getAttribLocation(shaderprogram, "position");
    gl.vertexAttribPointer(_position, 3, gl.FLOAT, false,0,0);
    gl.enableVertexAttribArray(_position);

    gl.bindBuffer(gl.ARRAY_BUFFER, color_buffer);
    var _color = gl.getAttribLocation(shaderprogram, "color");
    gl.vertexAttribPointer(_color, 3, gl.FLOAT, false,0,0) ;
    gl.enableVertexAttribArray(_color);

    gl.useProgram(shaderprogram);


    /*==================== MATRIX ====================== */

    function get_projection(angle, a, zMin, zMax) {
    var ang = Math.tan((angle*.5)*Math.PI/180);//angle*.5
    return [
    0.5/ang, 0 , 0, 0,
    0, 0.5*a/ang, 0, 0,
    0, 0, -(zMax+zMin)/(zMax-zMin), -1,
    0, 0, (-2*zMax*zMin)/(zMax-zMin), 0
    ];
    }

    var proj_matrix = get_projection(40, canvas.width/canvas.height, 1, 100);
    var mo_matrix = [ 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 ];
    var view_matrix = [ 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 ];

    view_matrix[14] = view_matrix[14]-6;

    /*================= Mouse events ======================*/

    var AMORTIZATION = 0.95;
    var drag = false;
    var old_x, old_y;
    var dX = 0, dY = 0;

    var mouseDown = function(e) {
    drag = true;
    old_x = e.pageX, old_y = e.pageY;
    e.preventDefault();
    return false;
    };

    var mouseUp = function(e){
    drag = false;
    };

    var mouseMove = function(e) {
    if (!drag) return false;
    dX = (e.pageX-old_x)*2*Math.PI/canvas.width,
    dY = (e.pageY-old_y)*2*Math.PI/canvas.height;
    THETA+= dX;
    PHI+=dY;
    old_x = e.pageX, old_y = e.pageY;
    e.preventDefault();
    };

    canvas.addEventListener("mousedown", mouseDown, false);
    canvas.addEventListener("mouseup", mouseUp, false);
    canvas.addEventListener("mouseout", mouseUp, false);
    canvas.addEventListener("mousemove", mouseMove, false);

    /*=========================rotation================*/

    function rotateX(m, angle) {
    var c = Math.cos(angle);
    var s = Math.sin(angle);
    var mv1 = m[1], mv5 = m[5], mv9 = m[9];

    m[1] = m[1]*c-m[2]*s;
    m[5] = m[5]*c-m[6]*s;
    m[9] = m[9]*c-m[10]*s;

    m[2] = m[2]*c+mv1*s;
    m[6] = m[6]*c+mv5*s;
    m[10] = m[10]*c+mv9*s;
    }

    function rotateY(m, angle) {
    var c = Math.cos(angle);
    var s = Math.sin(angle);
    var mv0 = m[0], mv4 = m[4], mv8 = m[8];

    m[0] = c*m[0]+s*m[2];
    m[4] = c*m[4]+s*m[6];
    m[8] = c*m[8]+s*m[10];

    m[2] = c*m[2]-s*mv0;
    m[6] = c*m[6]-s*mv4;
    m[10] = c*m[10]-s*mv8;
    }

    /*=================== Drawing =================== */

    var THETA = 0,
    PHI = 0;
    var time_old = 0;

    var animate = function(time) {
    var dt = time-time_old;

    if (!drag) {
    dX *= AMORTIZATION, dY*=AMORTIZATION;
    THETA+=dX, PHI+=dY;
    }

    //set model matrix to I4

    mo_matrix[0] = 1, mo_matrix[1] = 0, mo_matrix[2] = 0, mo_matrix[3] = 0,
    mo_matrix[4] = 0, mo_matrix[5] = 1, mo_matrix[6] = 0, mo_matrix[7] = 0,
    mo_matrix[8] = 0, mo_matrix[9] = 0, mo_matrix[10] = 1, mo_matrix[11] = 0,
    mo_matrix[12] = 0, mo_matrix[13] = 0, mo_matrix[14] = 0, mo_matrix[15] = 1;

    rotateY(mo_matrix, THETA);
    rotateX(mo_matrix, PHI);

    time_old = time;
    gl.enable(gl.DEPTH_TEST);

    // gl.depthFunc(gl.LEQUAL);

    gl.clearColor(0.0, 0.0, 0.0, 0.9);
    gl.clearDepth(1.0);
    gl.viewport(0.0, 0.0, canvas.width, canvas.height);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

    gl.uniformMatrix4fv(_Pmatrix, false, proj_matrix);
    gl.uniformMatrix4fv(_Vmatrix, false, view_matrix);
    gl.uniformMatrix4fv(_Mmatrix, false, mo_matrix);

    gl.uniform1f(_Mtime2, time*1e-3);
    gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);

    if( 1)// 1 vs 0
    {
    gl.uniform3f(_Mpencolor, 0.0,0.0,1.0);//blue fncEgrad = E field
    gl.uniform1i(_Mmode, 1);
    gl.drawArrays(gl.LINES, 0, 32*32*2*3);

    gl.uniform3f(_Mpencolor, 1.0,0.0,0.0);//red curlA = B field
    gl.uniform1i(_Mmode, 2);
    gl.drawArrays(gl.LINES, 0, 32*32*2*3);
    }else{
    gl.uniform3f(_Mpencolor, 1.0,1.0,0.0);//yellow fncA = vector potential
    gl.uniform1i(_Mmode, 2);
    gl.drawArrays(gl.LINES, 0, 32*32*2*3);
    }
    window.requestAnimationFrame(animate);
    }

    animate(0);

    </script>

    </body>
    </html>