// (C) 1996 G.J. Smit, Nijmegen, Nederland // This software is published under the GNU General Public License v3.0 // www.dbphysics.org // The program 'Einstein' photographs (plots) a piece of einsteinian space time where individual and multiple dimensional basics can be seen, showing the deformation of space time as seen for an outside observer. #include "conio.h" #include "graphics.h" #include "math.h" #include "process.h" #include "stdio.h" #include "stdlib.h" #include "string.h" FILE *vkini; // Actieve rekenvariabelen. FILE *vkxyz; // Krommingssterkte en virtuele 3D-co”rdinaten. FILE *vkfilm; // Film krommingsverloop. char fiotest; // Menu +/- controle op bestaande bestanden. char prog; // Stuurt programmaverloop. float xd[24],yd[24],zd[24]; // Co”rdinaten van maximaal 24 1db's. char deel,dtel,ctel; // Actieve hoeveelheid 1db's en teller daarvoor en teller voor invoer coordinaten. float bereik,stap; // Formaat en resolutie van berekende ruimte-kubus. float kromming,afstand; // Sterkte en spreiding van de zichtbare kromming. char ruimte; // Al of niet afbeelden als gekromde ruimte. float schaal; // Grootte van afbeelding op scherm. char kl_modus; // Kleurenpalette/kleurmodus. float dummy,begin,eind; // Waarden voor film. float frag; // Voor film krommingsverloop. char film; // Bepaalt film aan/uit in tekenfunctie. int ftel,fx,fy; // Besturing film. unsigned far fk; // Besturing film. char toets; // Test op toetsaanslag in menu. float x,y,z; // Actieve rekenco”rdinaten. float afx,afy,afz,afs,krm; // Berekenen krommingssterkten. float xtot,ytot,ztot; // Berekenen visuele co”rdinaten. float ktot; // Berekenen totale krommingssterkte per co”rdinaat. int v1,v2; // Instellen video-mode. float x2,y2; // 2D co”rdinaten voor het beeldscherm. float kleur,midx,midy; // Kleur van te tekenen pixel + relocatie. float afst,kl_w; // Voor tekenen in kl_modus=2. char c_invoer; // Voor invoer co”rdinaten. char bnaam[13],tnaam[13]; // Voor variabele bestandsnaam int huge DetectSvga256() { int vid; vid=4; return vid; } void kleur_mod(void) { v1=0;v2=2341; installuserdriver("Svga256",DetectSvga256); initgraph(&v1,&v2,""); midx=getmaxx()/2;midy=getmaxy()/2; if(kl_modus==0) { for(dtel=0;dtel<63;dtel++) setrgbpalette(32+dtel,dtel,dtel,dtel); } if(kl_modus==1) { for(dtel=0;dtel<64;dtel++) setrgbpalette(128+dtel,63-dtel,dtel,0); for(dtel=0;dtel<64;dtel++) setrgbpalette(192+dtel,0,63-dtel,dtel); } if(kl_modus==2) { for(dtel=0;dtel<32;dtel++) setrgbpalette(32+dtel,2*dtel,2*dtel,2*dtel); for(dtel=0;dtel<32;dtel++) setrgbpalette(64+dtel,2*dtel,0,0); for(dtel=0;dtel<32;dtel++) setrgbpalette(96+dtel,0,2*dtel,0); for(dtel=0;dtel<32;dtel++) setrgbpalette(128+dtel,0,0,2*dtel); for(dtel=0;dtel<32;dtel++) setrgbpalette(160+dtel,2*dtel,2*dtel,0); for(dtel=0;dtel<32;dtel++) setrgbpalette(192+dtel,0,2*dtel,2*dtel); for(dtel=0;dtel<32;dtel++) setrgbpalette(224+dtel,2*dtel,0,2*dtel); } setfillstyle(1,0); } void reken(void) { _setcursortype(_NOCURSOR); strcpy(tnaam,bnaam); strcat(tnaam,".ini"); vkini=fopen(tnaam,"wb"); fprintf(vkini,"%d %f %f ",deel,bereik,stap); for(dtel=0;dtelkromming-afstand&&ktotkromming&&ktot<(kromming+afstand)) kleur=160+64*(ktot-kromming)/afstand; else kleur=160+64*(ktot-kromming)/afstand; } if(kl_modus==2) { afst=1000000; kl_w=32; for(dtel=0;dtelafs) { afst=afs; kl_w=32*dtel; } } kleur=(x+bereik)/(2*bereik)*30+1+kl_w; } putpixel(midx+x2,midy-y2,32+kleur); } if(kbhit()!=0) { if(getch()==27) { if(ruimte==0) printf("\n\nOnderbroken k:%f x:%f y:%f z:%f x2:%f y2:%f",ktot,x,y,z,x2,y2); else printf("\n\nOnderbroken k:%f x:%f y:%f z:%f x2:%f y2:%f",ktot,xtot,ytot,ztot,x2,y2); x=bereik; y=bereik; z=bereik; if(film!=0) // Als film cre‰ren dan einde beeld-lus. { kromming=eind; film=0; } } } } } } fclose(vkxyz); if(film==0) { getch(); toets=32; } else { for(fy=19;fy<768;fy++) { for(fx=0;fx<1024;fx++) { fk=getpixel(fx,fy); if(fk!=0) fprintf(vkfilm,"%d %d %u ",fx,fy,fk); } } } } void animatie(void) { putchar(13); printf("KF : Begin:%f Eind:%f Fragment:%f Ruimte:%d Kleur:%d Schaal:%f", begin,eind,frag,ruimte,kl_modus,schaal); vkfilm=fopen("vkfilm.xyz","rb"); do { fscanf(vkfilm,"%d",&ftel); if(ftel<0) { if(ftel!=-1) { if(ftel==-1000) printf(" Laatste beeld"); toets=getch(); if(toets!=27) bar(0,19,1023,767); else toets=32; } fscanf(vkfilm,"%d",&fx); } else fx=ftel; fscanf(vkfilm,"%d",&fy); fscanf(vkfilm,"%u",&fk); putpixel(fx,fy,fk); } while(ftel>-999); fclose(vkfilm); } void cord_in(void) // Nu 24 deeltjes in te voeren { for(dtel=0;dtel "); scanf("%f",&xd[dtel]); printf("y > "); scanf("%f",&yd[dtel]); printf("z > "); scanf("%f",&zd[dtel]); } toets=32; } void main(void) { // Bepalen van beginwaarden voor actieve rekenvariabelen. strcpy(bnaam,"vkveld"); strcpy(tnaam,bnaam); strcat(tnaam,".ini"); vkini=fopen(tnaam,"rb"); if(vkini==NULL) { fiotest=0; deel=7; bereik=10; stap=.25; for(dtel=0;dtel begin programma-lus. prog=1; do { // Menu op het scherm. _setcursortype(_NOCURSOR); clrscr(); printf("Bestandsnaa[m] : %s\n\n",bnaam); printf("[T]ekenen "); if(fiotest==1||fiotest==3) printf("+"); else printf("-"); printf(" [R]ekenen\n"); printf("[F]ilm "); if(fiotest==2||fiotest==3) printf("+"); else printf("-"); printf(" [C]re‰ren\n"); printf("[w]illekeur [i]nvoeren\n"); printf("[d]eel : %d\n",deel); printf("[b]ereik : %f\n",bereik); printf("[s]tap : %f\n",stap); printf("[k]romming : %f\n",kromming); printf("[a]fstand : %f\n",afstand); printf("[r]uimte : "); if(ruimte==0) printf("lineair\n"); else printf("gekromd\n"); printf("s[c]haal : %f\n",schaal); printf("k[l]eur : "); if(kl_modus==0) printf("3D grijswaarden\n"); if(kl_modus==1) printf("2D krommingssterkte\n"); if(kl_modus==2) printf("3D per deeltje\n"); printf("b[e]gin : %f\n",begin); printf("ei[n]d : %f\n",eind); printf("[f]ragment : %f\n",frag); // Bestandsnaam afdrukken // Co”rdinaten op het scherm. for(dtel=0;dtel24) deel=24; if(kl_modus==2) kl_modus=0; } if(toets==98) { printf("Maximale co”rdinaten ? "); scanf("%f",&bereik); if(bereik==0) bereik=10; if(bereik<0) bereik=-bereik; } if(toets==115) { gotoxy(1,19); printf("Resolutie ? "); scanf("%f",&stap); if(stap==0) stap=.25; if(stap<0) stap=-stap; } if(toets==119) { for(dtel=0;dtel G.J.Smit Geb:08-01-68, Veendam )\n"); printf(" De theorie in hoeverre het betrekking heeft op dit programma. Dit pro-\n"); printf("gramma geeft een stilstaande foto van een aantal 1db's in een bepaalde ruimte,\n"); printf("op een bepaalde afstand van elkaar. Er is geen beweging, alleen hun onderlinge\n"); printf("positie. Dit programma berekend een kubus ruimte met een bepaalde grootte met\n"); printf("als middelpunt x,y,z-co”rdinaat (0,0,0). De 1db's hebben een bepaalde locatie\n"); printf("met elk zijn specifieke co”rdinaten in die kubus. Op het punt waar de 1db zich\n"); printf("bevindt is de ruimte oneindig sterk gekromd (de 1db ¨s de gekromde ruimte!).\n"); printf("Op een bepaalde afstand van een 1db is de ruimte de in die mate gekromd als\n"); printf("bepaalt door 1/afstand (of waarschijnlijker 1/afstand^2 zoals wij dat waar-\n"); printf("nemen bij o.a. de zwaartekracht) (en logisch met een 3-dimensionaal heelal\n"); printf("gezien de 'localiteit' van energie (energie=mate van kromming t.o.v. omgeving)?\n"); printf("Een 1db is net als alle omliggende ruimte, alleen is in dat punt de ruimte ten\n"); printf("opzichte van de omgeving een factor oneindig sterker gekromd. Het is allemaal\n"); printf("puur relatief. Want ook al is de omliggende ruimte op een bepaalde afstand\n"); printf("bijvoorbeeld de helft van de 1db kromming, dan is die ruimte daar ook oneindig\n"); printf("gekromd (0.5*ģ=ģ). Er is dus alleen sprake van een relatief sterkere kromming,\n"); printf("slechts absoluut, en eindig in verhouding tot andere 1db's. Dat wil zeggen;\n"); printf("meetbare parameters zijn onderlinge afstand en onderlinge snelheid. Ze zijn\n"); printf("allen oneindig, doch meetbaar eindig in verhouding tot elkaar Met welke\n"); printf("snelheid naderen ze elkaar en welke afstand hebben ze tot elkaar? In principe\n"); printf("meetbaar, in elk geval berekenbaar. "); getch(); clrscr(); printf("Technische opmerkingen:\n\n"); printf("Bereik: Kleiner dan .01 en groter dan 100 levert onbetrouwbare resultaten op.\n"); printf(" Dit door het maximum bereik van 'float-type' variabelen.\n\n"); printf("Schaal: De schaal is alleen re‰el in lineaire-ruimte afbeelding. In gekromde-\n"); printf(" ruimte afbeelding is de grootte het resultaat van een algoritme dat\n"); printf(" bepaalt in hoeverre de kromming van de 1db's de in 3D berekende kubus\n"); printf(" van vlakke ruimte vervormd. "); getch(); } } whil