Borland C Program Einstein:
| 0 | // (C) 1996 G.J. Smit, Nijmegen, Nederland |
|---|---|
| 1 | // This software is published under the GNU General Public License v3.0 |
| 2 | // www.dbphysics.com |
| 3 | // 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. |
| 4 | |
| 5 | #include |
| 6 | #include |
| 7 | #include |
| 8 | #include |
| 9 | #include |
| 10 | #include |
| 11 | #include |
| 12 | |
| 13 | FILE *vkini; // Actieve rekenvariabelen. |
| 14 | FILE *vkxyz; // Krommingssterkte en virtuele 3D-cordinaten. |
| 15 | FILE *vkfilm; // Film krommingsverloop. |
| 16 | char fiotest; // Menu +/- controle op bestaande bestanden. |
| 17 | char prog; // Stuurt programmaverloop. |
| 18 | float xd[24],yd[24],zd[24]; // Cordinaten van maximaal 24 1db's. |
| 19 | char deel,dtel,ctel; // Actieve hoeveelheid 1db's en teller daarvoor en teller voor invoer coordinaten. |
| 20 | float bereik,stap; // Formaat en resolutie van berekende ruimte-kubus. |
| 21 | float kromming,afstand; // Sterkte en spreiding van de zichtbare kromming. |
| 22 | char ruimte; // Al of niet afbeelden als gekromde ruimte. |
| 23 | float schaal; // Grootte van afbeelding op scherm. |
| 24 | char kl_modus; // Kleurenpalette/kleurmodus. |
| 25 | float dummy,begin,eind; // Waarden voor film. |
| 26 | float frag; // Voor film krommingsverloop. |
| 27 | char film; // Bepaalt film aan/uit in tekenfunctie. |
| 28 | int ftel,fx,fy; // Besturing film. |
| 29 | unsigned far fk; // Besturing film. |
| 30 | char toets; // Test op toetsaanslag in menu. |
| 31 | float x,y,z; // Actieve rekencordinaten. |
| 32 | float afx,afy,afz,afs,krm; // Berekenen krommingssterkten. |
| 33 | float xtot,ytot,ztot; // Berekenen visuele cordinaten. |
| 34 | float ktot; // Berekenen totale krommingssterkte per cordinaat. |
| 35 | int v1,v2; // Instellen video-mode. |
| 36 | float x2,y2; // 2D cordinaten voor het beeldscherm. |
| 37 | float kleur,midx,midy; // Kleur van te tekenen pixel + relocatie. |
| 38 | float afst,kl_w; // Voor tekenen in kl_modus=2. |
| 39 | char c_invoer; // Voor invoer cordinaten. |
| 40 | char bnaam[13],tnaam[13]; // Voor variabele bestandsnaam |
| 41 | |
| 42 | int huge DetectSvga256() { int vid; vid=4; return vid; } |
| 43 | |
| 44 | void kleur_mod(void) |
| 45 | { v1=0;v2=2341; |
| 46 | installuserdriver("Svga256",DetectSvga256); |
| 47 | initgraph(&v1,&v2,""); |
| 48 | midx=getmaxx()/2;midy=getmaxy()/2; |
| 49 | if(kl_modus==0) { for(dtel=0;dtel<63;dtel++) setrgbpalette(32+dtel,dtel,dtel,dtel); } |
| 50 | if(kl_modus==1) |
| 51 | { for(dtel=0;dtel<64;dtel++) setrgbpalette(128+dtel,63-dtel,dtel,0); |
| 52 | for(dtel=0;dtel<64;dtel++) setrgbpalette(192+dtel,0,63-dtel,dtel); |
| 53 | } |
| 54 | if(kl_modus==2) |
| 55 | { for(dtel=0;dtel<32;dtel++) setrgbpalette(32+dtel,2*dtel,2*dtel,2*dtel); |
| 56 | for(dtel=0;dtel<32;dtel++) setrgbpalette(64+dtel,2*dtel,0,0); |
| 57 | for(dtel=0;dtel<32;dtel++) setrgbpalette(96+dtel,0,2*dtel,0); |
| 58 | for(dtel=0;dtel<32;dtel++) setrgbpalette(128+dtel,0,0,2*dtel); |
| 59 | for(dtel=0;dtel<32;dtel++) setrgbpalette(160+dtel,2*dtel,2*dtel,0); |
| 60 | for(dtel=0;dtel<32;dtel++) setrgbpalette(192+dtel,0,2*dtel,2*dtel); |
| 61 | for(dtel=0;dtel<32;dtel++) setrgbpalette(224+dtel,2*dtel,0,2*dtel); |
| 62 | } |
| 63 | setfillstyle(1,0); |
| 64 | } |
| 65 | |
| 66 | void reken(void) |
| 67 | { _setcursortype(_NOCURSOR); |
| 68 | strcpy(tnaam,bnaam); strcat(tnaam,".ini"); |
| 69 | vkini=fopen(tnaam,"wb"); |
| 70 | fprintf(vkini,"%d %f %f ",deel,bereik,stap); |
| 71 | for(dtel=0;dtel |
| 72 | fclose(vkini); |
| 73 | |
| 74 | // Bestand openen voor krommingssterkte en visuele 3D cordinaten. |
| 75 | strcpy(tnaam,bnaam); strcat(tnaam,".xyz"); |
| 76 | vkxyz=fopen(tnaam,"wb"); |
| 77 | |
| 78 | // Berekenen krommingssterkten per cordinaat per deeltje in kubus. |
| 79 | for(x=-bereik;x |
| 80 | { gotoxy(14,19); printf(": %5.3f procent",x/(2*bereik)*100+50); |
| 81 | for(y=-bereik;y |
| 82 | { for(z=-bereik;z |
| 83 | { ktot=0; xtot=0; ytot=0; ztot=0; |
| 84 | for(dtel=0;dtel |
| 85 | { afx=(x-xd[dtel])*(x-xd[dtel]); // Afstand per x,y,z as. |
| 86 | afy=(y-yd[dtel])*(y-yd[dtel]); |
| 87 | afz=(z-zd[dtel])*(z-zd[dtel]); |
| 88 | afs=sqrt(afx+afy+afz); // Afstand cordinaat tot deeltje. |
| 89 | if(afs!=0) krm=1/(afs*afs); else krm=1000000; // Krommingssterkte bepalen. |
| 90 | // Bepalen cordinaten voor representatie van visuele ruimte door krommingssterkte. |
| 91 | ktot+=krm; |
| 92 | xtot+=(x-xd[dtel])/krm; |
| 93 | ytot+=(y-yd[dtel])/krm; |
| 94 | ztot+=(z-zd[dtel])/krm; |
| 95 | } |
| 96 | fprintf(vkxyz,"%f %f %f %f ",ktot,xtot,ytot,ztot); |
| 97 | } |
| 98 | } |
| 99 | if(kbhit()!=0) |
| 100 | { if(getch()==27) x=bereik; |
| 101 | } |
| 102 | } |
| 103 | fclose(vkxyz); |
| 104 | if(fiotest==0||fiotest==1) fiotest=1; else fiotest=3; |
| 105 | if(toets==27) |
| 106 | { unlink(tnaam); |
| 107 | if(fiotest==3) fiotest=2; else fiotest=0; |
| 108 | } |
| 109 | toets=32; |
| 110 | } |
| 111 | |
| 112 | void teken(void) |
| 113 | { if(film==0) |
| 114 | { strcpy(tnaam,bnaam); strcat(tnaam,".ini"); |
| 115 | vkini=fopen(tnaam,"rb"); |
| 116 | fscanf(vkini,"%d%f%f",&deel,&bereik,&stap); |
| 117 | for(dtel=0;dtel |
| 118 | fclose(vkini); |
| 119 | printf("Deel:%d Bereik:%f Stap:%f Kromming:%f Afstand:%f Ruimte:%d Kleur:%d Schaal:%f", |
| 120 | deel,bereik,stap,kromming,afstand,ruimte,kl_modus,schaal); |
| 121 | } |
| 122 | else |
| 123 | { bar(0,0,1023,767); |
| 124 | gotoxy(1,1); |
| 125 | printf("FC : Begin:%f Eind:%f Fragment:%f Kromming:%f Afstand:%f Ruimte:%d Kleur:%d Schaal:%f", |
| 126 | begin,eind,frag,kromming,afstand,ruimte,kl_modus,schaal); |
| 127 | } |
| 128 | |
| 129 | setcolor(7);line(0,18,1023,18);setcolor(10); |
| 130 | strcpy(tnaam,bnaam); strcat(tnaam,".xyz"); |
| 131 | vkxyz=fopen(tnaam,"rb"); |
| 132 | |
| 133 | for(x=-bereik;x |
| 134 | { line((x/(2*bereik)*100+50)*10.24,18,((x+stap)/(2*bereik)*100+50)*10.24,18); |
| 135 | for(y=-bereik;y |
| 136 | { for(z=-bereik;z |
| 137 | { fscanf(vkxyz,"%f %f %f %f",&ktot,&xtot,&ytot,&ztot); |
| 138 | if(ktot>kromming-afstand&&ktot |
| 139 | { if(ruimte==0) { xtot=x; ytot=y; ztot=z; } |
| 140 | x2=(ytot-.5*xtot)*schaal; |
| 141 | y2=(ztot-.5*xtot)*schaal; |
| 142 | if(kl_modus==0) kleur=(x+bereik)/(2*bereik)*62+1; |
| 143 | if(kl_modus==1) |
| 144 | { if(ktot>kromming&&ktot<(kromming+afstand)) kleur=160+64*(ktot-kromming)/afstand; |
| 145 | else kleur=160+64*(ktot-kromming)/afstand; |
| 146 | } |
| 147 | if(kl_modus==2) |
| 148 | { afst=1000000; |
| 149 | kl_w=32; |
| 150 | for(dtel=0;dtel |
| 151 | { afx=(x-xd[dtel])*(x-xd[dtel]); |
| 152 | afy=(y-yd[dtel])*(y-yd[dtel]); |
| 153 | afz=(z-zd[dtel])*(z-zd[dtel]); |
| 154 | afs=sqrt(afx+afy+afz); |
| 155 | if(afst>afs) |
| 156 | { afst=afs; |
| 157 | kl_w=32*dtel; |
| 158 | } |
| 159 | } |
| 160 | kleur=(x+bereik)/(2*bereik)*30+1+kl_w; |
| 161 | } |
| 162 | putpixel(midx+x2,midy-y2,32+kleur); |
| 163 | } |
| 164 | if(kbhit()!=0) |
| 165 | { if(getch()==27) |
| 166 | { if(ruimte==0) |
| 167 | printf("\n\nOnderbroken k:%f x:%f y:%f z:%f x2:%f y2:%f",ktot,x,y,z,x2,y2); |
| 168 | else |
| 169 | printf("\n\nOnderbroken k:%f x:%f y:%f z:%f x2:%f y2:%f",ktot,xtot,ytot,ztot,x2,y2); |
| 170 | x=bereik; y=bereik; z=bereik; |
| 171 | if(film!=0) // Als film creren dan einde beeld-lus. |
| 172 | { kromming=eind; |
| 173 | film=0; |
| 174 | } |
| 175 | } |
| 176 | } |
| 177 | } |
| 178 | } |
| 179 | } |
| 180 | fclose(vkxyz); |
| 181 | if(film==0) |
| 182 | { getch(); |
| 183 | toets=32; |
| 184 | } |
| 185 | else |
| 186 | { for(fy=19;fy<768;fy++) |
| 187 | { for(fx=0;fx<1024;fx++) |
| 188 | { fk=getpixel(fx,fy); |
| 189 | if(fk!=0) fprintf(vkfilm,"%d %d %u ",fx,fy,fk); |
| 190 | } |
| 191 | } |
| 192 | } |
| 193 | } |
| 194 | |
| 195 | void animatie(void) |
| 196 | { putchar(13); |
| 197 | printf("KF : Begin:%f Eind:%f Fragment:%f Ruimte:%d Kleur:%d Schaal:%f", |
| 198 | begin,eind,frag,ruimte,kl_modus,schaal); |
| 199 | |
| 200 | vkfilm=fopen("vkfilm.xyz","rb"); |
| 201 | |
| 202 | do |
| 203 | { fscanf(vkfilm,"%d",&ftel); |
| 204 | if(ftel<0) |
| 205 | { if(ftel!=-1) |
| 206 | { if(ftel==-1000) printf(" Laatste beeld"); |
| 207 | toets=getch(); |
| 208 | if(toets!=27) bar(0,19,1023,767); |
| 209 | else toets=32; |
| 210 | } |
| 211 | fscanf(vkfilm,"%d",&fx); |
| 212 | } |
| 213 | else fx=ftel; |
| 214 | fscanf(vkfilm,"%d",&fy); |
| 215 | fscanf(vkfilm,"%u",&fk); |
| 216 | putpixel(fx,fy,fk); |
| 217 | } while(ftel>-999); |
| 218 | fclose(vkfilm); |
| 219 | } |
| 220 | |
| 221 | void cord_in(void) // Nu 24 deeltjes in te voeren |
| 222 | { |
| 223 | for(dtel=0;dtel |
| 224 | { clrscr(); |
| 225 | printf("Bestandsnaa[m] : %s\n\n",bnaam); |
| 226 | printf("[T]ekenen "); |
| 227 | if(fiotest==1||fiotest==3) printf("+"); else printf("-"); |
| 228 | printf(" [R]ekenen\n"); |
| 229 | printf("[F]ilm "); |
| 230 | if(fiotest==2||fiotest==3) printf("+"); else printf("-"); |
| 231 | printf(" [C]reren\n"); |
| 232 | printf("[w]illekeur [i]nvoeren\n"); |
| 233 | printf("[d]eel : %d\n",deel); |
| 234 | printf("[b]ereik : %f\n",bereik); |
| 235 | printf("[s]tap : %f\n",stap); |
| 236 | printf("[k]romming : %f\n",kromming); |
| 237 | printf("[a]fstand : %f\n",afstand); |
| 238 | printf("[r]uimte : "); |
| 239 | if(ruimte==0) printf("lineair\n"); else printf("gekromd\n"); |
| 240 | printf("s[c]haal : %f\n",schaal); |
| 241 | printf("k[l]eur : "); |
| 242 | if(kl_modus==0) printf("3D grijswaarden\n"); |
| 243 | if(kl_modus==1) printf("2D krommingssterkte\n"); |
| 244 | if(kl_modus==2) printf("3D per deeltje\n"); |
| 245 | printf("b[e]gin : %f\n",begin); |
| 246 | printf("ei[n]d : %f\n",eind); |
| 247 | printf("[f]ragment : %f\n",frag); |
| 248 | |
| 249 | for(ctel=0;ctel |
| 250 | { gotoxy(38,1+ctel); |
| 251 | printf("%d : %f %f %f",ctel,xd[ctel],yd[ctel],zd[ctel]); |
| 252 | } |
| 253 | |
| 254 | gotoxy(1,19); printf("Deel : %d\n",dtel); |
| 255 | printf("x > "); scanf("%f",&xd[dtel]); |
| 256 | printf("y > "); scanf("%f",&yd[dtel]); |
| 257 | printf("z > "); scanf("%f",&zd[dtel]); |
| 258 | } |
| 259 | toets=32; |
| 260 | } |
| 261 | |
| 262 | void main(void) |
| 263 | { // Bepalen van beginwaarden voor actieve rekenvariabelen. |
| 264 | strcpy(bnaam,"vkveld"); |
| 265 | strcpy(tnaam,bnaam); strcat(tnaam,".ini"); |
| 266 | vkini=fopen(tnaam,"rb"); |
| 267 | if(vkini==NULL) |
| 268 | { fiotest=0; |
| 269 | deel=7; bereik=10; stap=.25; |
| 270 | for(dtel=0;dtel |
| 271 | { xd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 272 | yd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 273 | zd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 274 | } |
| 275 | } |
| 276 | else |
| 277 | { fiotest=1; |
| 278 | fscanf(vkini,"%d%f%f",&deel,&bereik,&stap); |
| 279 | for(dtel=0;dtel |
| 280 | { fscanf(vkini,"%f%f%f",&xd[dtel],&yd[dtel],&zd[dtel]); |
| 281 | } |
| 282 | } |
| 283 | fclose(vkini); |
| 284 | |
| 285 | // Testen of vkveld.xyz bestaat. |
| 286 | strcpy(tnaam,bnaam); strcat(tnaam,".xyz"); |
| 287 | vkxyz=fopen(tnaam,"rb"); |
| 288 | if(vkxyz==NULL) fiotest=0; |
| 289 | fclose(vkxyz); |
| 290 | |
| 291 | // Bepalen van beginwaarden voor actieve tekenvariabelen. |
| 292 | kromming=1; afstand=.25; schaal=10; ruimte=0; kl_modus=0; |
| 293 | |
| 294 | // Bepalen van beginwaarden voor actieve filmvariabelen. |
| 295 | vkini=fopen("vkfilm.ini","rb"); |
| 296 | if(vkini==NULL) |
| 297 | { begin=.5; eind=1.5; frag=.25; |
| 298 | } |
| 299 | else |
| 300 | { if(fiotest==0) fiotest=2; else fiotest=3; |
| 301 | fscanf(vkini,"%f%f%f%d",&begin,&eind,&frag,&kl_modus); |
| 302 | } |
| 303 | fclose(vkini); |
| 304 | |
| 305 | // Testen of vkfilm.xyz bestaat. |
| 306 | vkfilm=fopen("vkfilm.xyz","rb"); |
| 307 | if(vkfilm==NULL) { if(fiotest==1||fiotest==3) fiotest=1; else fiotest=0; } |
| 308 | fclose(vkfilm); |
| 309 | |
| 310 | // Menu -> begin programma-lus. |
| 311 | prog=1; do |
| 312 | { // Menu op het scherm. |
| 313 | _setcursortype(_NOCURSOR); |
| 314 | clrscr(); |
| 315 | printf("Bestandsnaa[m] : %s\n\n",bnaam); |
| 316 | printf("[T]ekenen "); |
| 317 | if(fiotest==1||fiotest==3) printf("+"); else printf("-"); |
| 318 | printf(" [R]ekenen\n"); |
| 319 | printf("[F]ilm "); |
| 320 | if(fiotest==2||fiotest==3) printf("+"); else printf("-"); |
| 321 | printf(" [C]reren\n"); |
| 322 | printf("[w]illekeur [i]nvoeren\n"); |
| 323 | printf("[d]eel : %d\n",deel); |
| 324 | printf("[b]ereik : %f\n",bereik); |
| 325 | printf("[s]tap : %f\n",stap); |
| 326 | printf("[k]romming : %f\n",kromming); |
| 327 | printf("[a]fstand : %f\n",afstand); |
| 328 | printf("[r]uimte : "); |
| 329 | if(ruimte==0) printf("lineair\n"); else printf("gekromd\n"); |
| 330 | printf("s[c]haal : %f\n",schaal); |
| 331 | printf("k[l]eur : "); |
| 332 | if(kl_modus==0) printf("3D grijswaarden\n"); |
| 333 | if(kl_modus==1) printf("2D krommingssterkte\n"); |
| 334 | if(kl_modus==2) printf("3D per deeltje\n"); |
| 335 | printf("b[e]gin : %f\n",begin); |
| 336 | printf("ei[n]d : %f\n",eind); |
| 337 | printf("[f]ragment : %f\n",frag); |
| 338 | |
| 339 | // Bestandsnaam afdrukken |
| 340 | |
| 341 | |
| 342 | // Cordinaten op het scherm. |
| 343 | for(dtel=0;dtel |
| 344 | { gotoxy(38,1+dtel); |
| 345 | printf("%d : %f %f %f",dtel,xd[dtel],yd[dtel],zd[dtel]); |
| 346 | } |
| 347 | |
| 348 | // Keuze voor functie en afhandeling daarvan. |
| 349 | toets=getch(); gotoxy(1,19); _setcursortype(_NORMALCURSOR); |
| 350 | if(toets==27) prog=0; |
| 351 | if(toets==100) |
| 352 | { printf("Aantal 1db's ? "); scanf("%d",&deel); |
| 353 | if(deel<1) deel=1; if(deel>24) deel=24; |
| 354 | if(kl_modus==2) kl_modus=0; |
| 355 | } |
| 356 | if(toets==98) |
| 357 | { printf("Maximale cordinaten ? "); scanf("%f",&bereik); |
| 358 | if(bereik==0) bereik=10; if(bereik<0) bereik=-bereik; |
| 359 | } |
| 360 | if(toets==115) |
| 361 | { gotoxy(1,19); printf("Resolutie ? "); scanf("%f",&stap); |
| 362 | if(stap==0) stap=.25; if(stap<0) stap=-stap; |
| 363 | } |
| 364 | if(toets==119) |
| 365 | { for(dtel=0;dtel |
| 366 | { xd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 367 | yd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 368 | zd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 369 | } |
| 370 | } |
| 371 | if(toets==105) cord_in(); |
| 372 | if(toets==107) |
| 373 | { printf("Zichtbare kromming ? "); scanf("%f",&kromming); |
| 374 | if(kromming==0) kromming=1; if(kromming<0) kromming=-kromming; |
| 375 | } |
| 376 | if(toets==97) |
| 377 | { printf("Afstand tot zichtbare kromming ? "); scanf("%f",&afstand); |
| 378 | if(afstand==0) afstand=.25; if(afstand<0) afstand=-afstand; |
| 379 | } |
| 380 | if(toets==114) |
| 381 | { if(ruimte==0) ruimte=1; else ruimte=0; |
| 382 | } |
| 383 | if(toets==99) |
| 384 | { printf("Grootte (op 1024x768) ? "); scanf("%f",&schaal); |
| 385 | if(schaal==0) schaal=10; if(schaal<0) schaal=-schaal; |
| 386 | } |
| 387 | if(toets==108) |
| 388 | { if(kl_modus==0) kl_modus=1; |
| 389 | else |
| 390 | { if(kl_modus==1) |
| 391 | { if(deel<8) kl_modus=2; else kl_modus=0; } |
| 392 | else |
| 393 | { if(kl_modus==2) kl_modus=0; } |
| 394 | } |
| 395 | } |
| 396 | if(toets==101) |
| 397 | { printf("Beginkromming ? "); scanf("%f",&begin); |
| 398 | if(begin<0) begin=-begin; |
| 399 | } |
| 400 | if(toets==110) |
| 401 | { printf("Eindkromming ? "); scanf("%f",&eind); |
| 402 | if(eind<0) eind=-eind; |
| 403 | } |
| 404 | if(toets==102) |
| 405 | { printf("Fragmentatie ? "); scanf("%f",&frag); |
| 406 | } |
| 407 | |
| 408 | if(toets==109) |
| 409 | { printf("Nieuwe bestandsnaam ? "); scanf("%s",&bnaam); |
| 410 | |
| 411 | // Testen of bnaam.ini bestaat. |
| 412 | strcpy(tnaam,bnaam); strcat(tnaam,".ini"); |
| 413 | vkini=fopen(tnaam,"rb"); |
| 414 | if(vkini==NULL) |
| 415 | { fiotest=0; |
| 416 | // deel=7; bereik=10; stap=.25; |
| 417 | // for(dtel=0;dtel |
| 418 | // { xd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 419 | // yd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 420 | // zd[dtel]=((random(32767)*bereik)/32767-bereik/2)*2; |
| 421 | // } |
| 422 | } |
| 423 | else |
| 424 | { fiotest=1; |
| 425 | fscanf(vkini,"%d%f%f",&deel,&bereik,&stap); |
| 426 | for(dtel=0;dtel |
| 427 | { fscanf(vkini,"%f%f%f",&xd[dtel],&yd[dtel],&zd[dtel]); |
| 428 | } |
| 429 | } |
| 430 | fclose(vkini); |
| 431 | |
| 432 | // Testen of bnaam.xyz bestaat. |
| 433 | strcpy(tnaam,bnaam); strcat(tnaam,".xyz"); |
| 434 | vkxyz=fopen(tnaam,"rb"); |
| 435 | if(vkxyz==NULL) fiotest=0; |
| 436 | fclose(vkxyz); |
| 437 | } |
| 438 | if(toets==82) |
| 439 | { if(fiotest==1||fiotest==3) |
| 440 | { printf("Bestand overschrijven (j/n) ? "); |
| 441 | toets=getch(); |
| 442 | if(toets==106) |
| 443 | { putchar(13); printf(" "); |
| 444 | putchar(13); printf("Rekenen"); |
| 445 | reken(); toets=32; |
| 446 | } |
| 447 | } |
| 448 | else |
| 449 | { putchar(13); printf("Rekenen"); |
| 450 | reken(); |
| 451 | } |
| 452 | } |
| 453 | if(toets==84) |
| 454 | { if(fiotest==0||fiotest==2) |
| 455 | { printf("Bestand bestaat niet ! "); getch(); |
| 456 | } |
| 457 | else |
| 458 | { film=0; |
| 459 | kleur_mod(); |
| 460 | teken(); |
| 461 | closegraph(); |
| 462 | } |
| 463 | } |
| 464 | if(toets==67) // Film creren. |
| 465 | { if(fiotest==3) // Test of vkfilm.xyz bestaat. |
| 466 | { printf("Bestand overschrijven (j/n) ? "); |
| 467 | toets=getch(); |
| 468 | if(toets==106) fiotest=1; |
| 469 | } |
| 470 | if(fiotest==1) |
| 471 | { // Kijk naar variabelen voor bereik & stap. |
| 472 | vkini=fopen("vkveld.ini","rb"); |
| 473 | fscanf(vkini,"%d%f%f",&deel,&bereik,&stap); |
| 474 | for(dtel=0;dtel |
| 475 | { fscanf(vkini,"%f%f%f",&xd[dtel],&yd[dtel],&zd[dtel]); |
| 476 | } |
| 477 | fclose(vkini); |
| 478 | |
| 479 | // Begin beeld-lus. |
| 480 | kleur_mod(); |
| 481 | vkini=fopen("vkfilm.ini","wb"); |
| 482 | fprintf(vkini,"%f %f %f %d",begin,eind,frag,kl_modus); |
| 483 | fclose(vkini); |
| 484 | vkfilm=fopen("vkfilm.xyz","wb"); |
| 485 | film=1; ftel=1; |
| 486 | for(kromming=begin;kromming |
| 487 | { fprintf(vkfilm,"-%d ",ftel); |
| 488 | teken(); |
| 489 | ftel++; |
| 490 | } |
| 491 | fprintf(vkfilm,"-1000"); |
| 492 | fclose(vkfilm); |
| 493 | fiotest=3; |
| 494 | if(film==0) |
| 495 | { fiotest=1; |
| 496 | unlink("vkfilm.xyz"); |
| 497 | } |
| 498 | closegraph(); |
| 499 | } |
| 500 | if(fiotest==0||fiotest==2) |
| 501 | { printf("Bestand bestaat niet ! "); getch(); |
| 502 | } |
| 503 | toets=32; |
| 504 | } |
| 505 | if(toets==70) |
| 506 | { if(fiotest==3) |
| 507 | { vkini=fopen("vkveld.ini","rb"); |
| 508 | fscanf(vkini,"%d%f%f",&deel,&bereik,&stap); |
| 509 | for(dtel=0;dtel |
| 510 | { fscanf(vkini,"%f%f%f",&xd[dtel],&yd[dtel],&zd[dtel]); |
| 511 | } |
| 512 | fclose(vkini); |
| 513 | kleur_mod(); |
| 514 | animatie(); |
| 515 | closegraph(); |
| 516 | } |
| 517 | if(fiotest==2) |
| 518 | { kleur_mod(); |
| 519 | animatie(); |
| 520 | closegraph(); |
| 521 | } |
| 522 | if(fiotest<2) |
| 523 | { printf("Bestand bestaat niet ! "); getch(); |
| 524 | } |
| 525 | toets=32; |
| 526 | } |
| 527 | if(toets==63) |
| 528 | { for(dtel=1;dtel<15;dtel++) |
| 529 | { gotoxy(1,dtel); printf(" "); |
| 530 | } |
| 531 | clrscr(); |
| 532 | printf("( 04-96, Nijmegen -> G.J.Smit Geb:08-01-68, Veendam )\n"); |
| 533 | printf(" De theorie in hoeverre het betrekking heeft op dit programma. Dit pro-\n"); |
| 534 | printf("gramma geeft een stilstaande foto van een aantal 1db's in een bepaalde ruimte,\n"); |
| 535 | printf("op een bepaalde afstand van elkaar. Er is geen beweging, alleen hun onderlinge\n"); |
| 536 | printf("positie. Dit programma berekend een kubus ruimte met een bepaalde grootte met\n"); |
| 537 | printf("als middelpunt x,y,z-cordinaat (0,0,0). De 1db's hebben een bepaalde locatie\n"); |
| 538 | printf("met elk zijn specifieke cordinaten in die kubus. Op het punt waar de 1db zich\n"); |
| 539 | printf("bevindt is de ruimte oneindig sterk gekromd (de 1db s de gekromde ruimte!).\n"); |
| 540 | printf("Op een bepaalde afstand van een 1db is de ruimte de in die mate gekromd als\n"); |
| 541 | printf("bepaalt door 1/afstand (of waarschijnlijker 1/afstand^2 zoals wij dat waar-\n"); |
| 542 | printf("nemen bij o.a. de zwaartekracht) (en logisch met een 3-dimensionaal heelal\n"); |
| 543 | printf("gezien de 'localiteit' van energie (energie=mate van kromming t.o.v. omgeving)?\n"); |
| 544 | printf("Een 1db is net als alle omliggende ruimte, alleen is in dat punt de ruimte ten\n"); |
| 545 | printf("opzichte van de omgeving een factor oneindig sterker gekromd. Het is allemaal\n"); |
| 546 | printf("puur relatief. Want ook al is de omliggende ruimte op een bepaalde afstand\n"); |
| 547 | printf("bijvoorbeeld de helft van de 1db kromming, dan is die ruimte daar ook oneindig\n"); |
| 548 | printf("gekromd (0.5*=). Er is dus alleen sprake van een relatief sterkere kromming,\n"); |
| 549 | printf("slechts absoluut, en eindig in verhouding tot andere 1db's. Dat wil zeggen;\n"); |
| 550 | printf("meetbare parameters zijn onderlinge afstand en onderlinge snelheid. Ze zijn\n"); |
| 551 | printf("allen oneindig, doch meetbaar eindig in verhouding tot elkaar Met welke\n"); |
| 552 | printf("snelheid naderen ze elkaar en welke afstand hebben ze tot elkaar? In principe\n"); |
| 553 | printf("meetbaar, in elk geval berekenbaar. "); |
| 554 | getch(); clrscr(); |
| 555 | printf("Technische opmerkingen:\n\n"); |
| 556 | printf("Bereik: Kleiner dan .01 en groter dan 100 levert onbetrouwbare resultaten op.\n"); |
| 557 | printf(" Dit door het maximum bereik van 'float-type' variabelen.\n\n"); |
| 558 | printf("Schaal: De schaal is alleen reel in lineaire-ruimte afbeelding. In gekromde-\n"); |
| 559 | printf(" ruimte afbeelding is de grootte het resultaat van een algoritme dat\n"); |
| 560 | printf(" bepaalt in hoeverre de kromming van de 1db's de in 3D berekende kubus\n"); |
| 561 | printf(" van vlakke ruimte vervormd. "); |
| 562 | |
| 563 | getch(); |
| 564 | } |
| 565 | } while (prog>0); |
| 566 | } |
| 567 |






