// (C) 1996 G.J. Smit, Nijmegen, Nederland // This software is published under the GNU General Public License v3.0 // www.dbphysics.org // The program 'Newton' is a n-body model where simultaneously for the positions of multiple dimensional basics (theoretical infinite curvature) moving through space time interact with each other according to newtonian laws. #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "string.h" #include "float.h" #include "math.h" #include "graphics.h" #include "svga256.h" FILE *bestand; // Pointer voor geopend bestand. char b_naam[12]; // Naam van actief bestand. char b_test; // Controle voor bestaan bestand. char toets; // Variabele voor ingedrukte toets. int t1,t2,t3,t4; // Tellers voor lussen. int stap,dim,deel; // Aantal stappen, dimensies en deeltjes. int spoor; // Lengte afbeelding in tijd per deeltje. int prog; // Programma einde. int i_temp; // Tijdelijk opslag integer. int midd; // Middelpunt in tekening aan/uit. int modus; // Kleur per deel/diepte. float w_g, w_x, w_y; // Windowgrootte, x en y co”rdinaatgrootte. float x_max, y_max; // Aantal pixels op beeldscherm. float t_frag, grens; // Tijdfragmentatie en grenswaarde ruimte. float r_o, r_n; // Bereik willekeurige beginco”rdinaten. float fzx, fzy, fzz; // Zwaartekracht per as. float g_temp; // Grenswaarde wisseling. float f_temp; // Tijdelijk opslag float. float midx, midy; // Middelpunt berekening-variabelen. float diepte; // Kleur-diepte variabele. float huge x3[1851][4]; // Maximaal 250 x3d-co”rdinaten. float huge y3[1851][4]; // Maximaal 250 y3d-co”rdinaten. float huge z3[1851][4]; // Maximaal 250 z3d-co”rdinaten. float huge x2[1851][30]; // Maximaal 30 x2d-co”rdinaten per deeltje. float huge y2[1851][30]; // Maximaal 30 y2d-co”rdinaten per deeltje. int huge DetectSvga256(){ int Vid; Vid=4; return Vid; } void theorie(void) // Rekenkundig variabele verhoudingen. { t1=0; t2=2639; installuserdriver("Svga256",DetectSvga256); initgraph(&t1,&t2,""); setcolor(7); for(t1=0; t1<20; t1++) { line(x_max/2+200-t1*10, y_max/2, x_max/2, y_max/2+t1*10); line(x_max/2-t1*10, y_max/2, x_max/2, y_max/2+200-t1*10); line(x_max/2-200+t1*10, y_max/2, x_max/2, y_max/2-t1*10); line(x_max/2+t1*10, y_max/2, x_max/2, y_max/2-200+t1*10); } getch(); closegraph(); } void varbestand(void) // Variabele waarden bestand inlezen. { bestand=fopen(b_naam,"r"); if(bestand==NULL) b_test=0; else { fscanf(bestand, "%d%d%f%f%f%f", &stap, &deel, &r_o, &r_n, &t_frag, &grens); if(grens!=0) w_g=1.5*grens; b_test=1; } fclose(bestand); } void menuopbeeld(void) { clrscr(); textcolor(10); printf("[b]estandsnaam "); if(b_test==0) printf("-"); else printf("+"); printf(" : %s\n\n", b_naam); printf("[c]o”rdinaten\n"); printf("[w]illekeur : %f\n", r_o); printf("[r]ichting : %f\n\n", r_n); printf("[t]ijdfragmentatie : %f\n", t_frag); printf("[g]rens : %f\n\n", grens); printf("[s]tappen : %d\n", stap); printf("[d]eel : %d\n\n", deel); printf("[v]enster : %f\n", w_g); printf("[p]rojectie : %d\n", spoor); printf("M goedmaken voor 3d: "); //printf("[m]iddelpunt : "); if(midd==0) printf("uit\n"); else printf("aan\n"); printf("[k]leurmodus : "); if(modus==0) printf("deel\n\n\n"); else printf("diepte\n\n\n"); printf("[R]ekenen [E]n [T]ekenen [S]toppen\n\n"); } void menuvraag(void) { toets=getch(); if(toets==98) { printf("Nieuwe bestandsnaam? "); scanf("%s", &b_naam); } if(toets==99) { printf("Invoer co”rdinaten, nog programmeren..."); getch(); } if(toets==119) { f_temp=r_o; printf("Maximale willekeur? "); scanf("%f", &r_o); if(r_o<0||r_o==0||r_o>30000) r_o=f_temp; } if(toets==114) { f_temp=r_n; printf("Maximale richting? "); scanf("%f", &r_n); if(r_n<0||r_o==0||r_o>2500) r_o=f_temp; } if(toets==116) { f_temp=t_frag; printf("Nieuwe tijdfragmentatie? "); scanf("%f", &t_frag); if(t_frag<0||t_frag==0||t_frag>1) t_frag=f_temp; } if(toets==103) { f_temp=grens; printf("Grens van ruimte? "); scanf("%f", &grens); if(grens<0||grens>32500) grens=f_temp; } if(toets==115) { i_temp=stap; printf("Aantal stappen? "); scanf("%d", &stap); if(stap<1||stap>32500) stap=i_temp; } if(toets==100) { i_temp=deel; printf("Aantal deeltjes? "); scanf("%d", &deel); if(deel<2||deel>1850) deel=i_temp; } if(toets==118) { f_temp=w_g; printf("Venstergrootte? "); scanf("%f", &w_g); if(w_g<0||w_g==0||w_g>32500) w_g=f_temp; } if(toets==112) { i_temp=spoor; printf("Aantal fragmenten? "); scanf("%d", &spoor); if(spoor<0||spoor>30) spoor=i_temp; } if(toets==109) { if(midd==0) midd=1; else midd=0; } if(toets==107) { if(modus==0) modus=1; else modus=0; } } void willekeur(void) { for(t1=0;t10) { if(x3[t2][1]<-grens||x3[t2][1]>grens) { g_temp=x3[t2][1]; x3[t2][1]=-x3[t2][0]; x3[t2][0]=-g_temp; } if(y3[t2][1]<-grens||y3[t2][1]>grens) { g_temp=y3[t2][1]; y3[t2][1]=-y3[t2][0]; y3[t2][0]=-g_temp; } if(z3[t2][1]<-grens||z3[t2][1]>grens) { g_temp=z3[t2][1]; z3[t2][1]=-z3[t2][0]; z3[t2][0]=-g_temp; } } } for(t2=0;t20) { if(x3[t2][1]<-grens||x3[t2][1]>grens) { g_temp=x3[t2][1]; x3[t2][1]=-x3[t2][0]; x3[t2][0]=-g_temp; } if(y3[t2][1]<-grens||y3[t2][1]>grens) { g_temp=y3[t2][1]; y3[t2][1]=-y3[t2][0]; y3[t2][0]=-g_temp; } if(z3[t2][1]<-grens||z3[t2][1]>grens) { g_temp=z3[t2][1]; z3[t2][1]=-z3[t2][0]; z3[t2][0]=-g_temp; } } } for(t2=0;t20) { midx=0; midy=0; } for(t2=0;t20) { if(x3[t2][1]<-grens||x3[t2][1]>grens) { g_temp=x3[t2][1]; x3[t2][1]=-x3[t2][0]; x3[t2][0]=-g_temp; } if(y3[t2][1]<-grens||y3[t2][1]>grens) { g_temp=y3[t2][1]; y3[t2][1]=-y3[t2][0]; y3[t2][0]=-g_temp; } if(z3[t2][1]<-grens||z3[t2][1]>grens) { g_temp=z3[t2][1]; z3[t2][1]=-z3[t2][0]; z3[t2][0]=-g_temp; } } } for(t2=0;t20) { midx=midx+x2[t2][0]; midy=midy+y2[t2][0]; } } if(midd>0) { midx=midx/deel; midy=midy/deel; } for(t2=0;t20) { x2[t2][0]=x_max/2+midx-w_x*x2[t2][0]; y2[t2][0]=y_max/2+midy-w_y*y2[t2][0]; } else { x2[t2][0]=x_max/2-w_x*x2[t2][0]; y2[t2][0]=y_max/2-w_y*y2[t2][0]; } if(modus==0) putpixel(x2[t2][0],y2[t2][0],2+t2); else putpixel(x2[t2][0],y2[t2][0],1+(x3[t2][1]+w_g)*diepte); if(spoor>0) { if(t10;t3--) { x2[t2][t3]=x2[t2][t3-1]; y2[t2][t3]=y2[t2][t3-1]; } } } } putchar(13); printf("%d",t1+1); } putchar(13); printf("Klaar"); getch(); closegraph(); } void teken(void) { t1=0; t2=2639; installuserdriver("Svga256",DetectSvga256); initgraph(&t1,&t2,""); // Berekenen hoeveelheid pixels per ‚‚nheid. w_x=(x_max+1)/(w_g*2); w_y=(y_max+1)/(w_g*2); bestand=fopen(b_naam,"r"); fscanf(bestand, "%d%d%f%f%f%f", &stap, &deel, &r_o, &r_n, &t_frag, &grens); printf(" |%d|%d|%f|%f|%f|%f|%f|%d|%s", stap, deel, r_o, r_n, t_frag, grens, w_g, spoor, b_naam); if(modus!=0) diepte=255/(w_g*2); for(t1=0;t10) { midx=0; midy=0; } for(t2=0;t20) { midx=midx+x2[t2][0]; midy=midy+y2[t2][0]; } } if(midd>0) { midx=midx/deel; midy=midy/deel; } for(t2=0;t20) { x2[t2][0]=x_max/2+midx-w_x*x2[t2][0]; y2[t2][0]=y_max/2+midy-w_y*y2[t2][0]; } else { x2[t2][0]=x_max/2-w_x*x2[t2][0]; y2[t2][0]=y_max/2-w_y*y2[t2][0]; } if(modus==0) putpixel(x2[t2][0],y2[t2][0],2+t2); else putpixel(x2[t2][0],y2[t2][0],1+(x3[t2][1]+w_g)*diepte); if(spoor>0) { if(t10;t3--) { x2[t2][t3]=x2[t2][t3-1]; y2[t2][t3]=y2[t2][t3-1]; } } } } } putchar(13); printf("Klaar"); fclose(bestand); getch(); closegraph(); } void main(void) { // Beginwaarden zetten. stap=250; deel=3; r_o=100; r_n=.0001; t_frag=1; grens=0; w_g=500; spoor=0; midd=0; spoor=0; modus=0; clrscr(); textcolor(10); // Grafische modus bepalen. t1=0; t2=2639; installuserdriver("Svga256",DetectSvga256); initgraph(&t1,&t2,""); x_max=getmaxx(); y_max=getmaxy(); closegraph(); // Test of standaard bestand bestaat. strcpy(b_naam, "bestand.xyz"); b_test=0; varbestand(); // Begin programma-lus. prog=1; do { menuopbeeld(); toets=0; menuvraag(); // [b]estandsnaam. if(toets==98) varbestand(); // [R]eken. if(toets==82) { if(b_test==1) { printf("Bestand %s overschrijven? [j/n] ", b_naam); i_temp=getch(); putchar(13); printf(" "); putchar(13); if(i_temp==106) b_test=0; } if(b_test==0) { willekeur(); if(grens>0||t_frag!=1) rekenmetopties(); else reken(); } } if(toets==69) { if(b_test==1) { printf("Bestand %s overschrijven? [j/n] ", b_naam); i_temp=getch(); putchar(13); printf(" "); putchar(13); if(i_temp==106) b_test=0; } if(b_test==0) { willekeur(); rekenenteken(); } } // [T]eken. if(toets==84) teken(); if(toets==65) { willekeur(); geendisk(); } if(toets==81) theorie(); if(toets==63) { printf("Bedacht en geschreven door G.J.Smit."); getch(); } if(toets==83) prog=0; } whi