Borland C Program Newton:
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 '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. |
4 | |
5 | #include "stdio.h" |
6 | #include "stdlib.h" |
7 | #include "conio.h" |
8 | #include "string.h" |
9 | #include "float.h" |
10 | #include "math.h" |
11 | #include "graphics.h" |
12 | #include "svga256.h" |
13 | |
14 | FILE *bestand; // Pointer voor geopend bestand. |
15 | char b_naam[12]; // Naam van actief bestand. |
16 | char b_test; // Controle voor bestaan bestand. |
17 | char toets; // Variabele voor ingedrukte toets. |
18 | int t1,t2,t3,t4; // Tellers voor lussen. |
19 | int stap,dim,deel; // Aantal stappen, dimensies en deeltjes. |
20 | int spoor; // Lengte afbeelding in tijd per deeltje. |
21 | int prog; // Programma einde. |
22 | int i_temp; // Tijdelijk opslag integer. |
23 | int midd; // Middelpunt in tekening aan/uit. |
24 | int modus; // Kleur per deel/diepte. |
25 | float w_g, w_x, w_y; // Windowgrootte, x en y co rdinaatgrootte. |
26 | float x_max, y_max; // Aantal pixels op beeldscherm. |
27 | float t_frag, grens; // Tijdfragmentatie en grenswaarde ruimte. |
28 | float r_o, r_n; // Bereik willekeurige beginco rdinaten. |
29 | float fzx, fzy, fzz; // Zwaartekracht per as. |
30 | float g_temp; // Grenswaarde wisseling. |
31 | float f_temp; // Tijdelijk opslag float. |
32 | float midx, midy; // Middelpunt berekening-variabelen. |
33 | float diepte; // Kleur-diepte variabele. |
34 | float huge x3[1851][4]; // Maximaal 250 x3d-co rdinaten. |
35 | float huge y3[1851][4]; // Maximaal 250 y3d-co rdinaten. |
36 | float huge z3[1851][4]; // Maximaal 250 z3d-co rdinaten. |
37 | float huge x2[1851][30]; // Maximaal 30 x2d-co rdinaten per deeltje. |
38 | float huge y2[1851][30]; // Maximaal 30 y2d-co rdinaten per deeltje. |
39 | |
40 | int huge DetectSvga256(){ int Vid; Vid=4; return Vid; } |
41 | |
42 | void theorie(void) // Rekenkundig variabele verhoudingen. |
43 | { t1=0; t2=2639; |
44 | installuserdriver("Svga256",DetectSvga256); |
45 | initgraph(&t1,&t2,""); |
46 | setcolor(7); |
47 | for(t1=0; t1<20; t1++) |
48 | { line(x_max/2+200-t1*10, y_max/2, x_max/2, y_max/2+t1*10); |
49 | line(x_max/2-t1*10, y_max/2, x_max/2, y_max/2+200-t1*10); |
50 | line(x_max/2-200+t1*10, y_max/2, x_max/2, y_max/2-t1*10); |
51 | line(x_max/2+t1*10, y_max/2, x_max/2, y_max/2-200+t1*10); |
52 | } |
53 | getch(); |
54 | closegraph(); |
55 | } |
56 | |
57 | void varbestand(void) // Variabele waarden bestand inlezen. |
58 | { bestand=fopen(b_naam,"r"); |
59 | if(bestand==NULL) b_test=0; |
60 | else |
61 | { fscanf(bestand, "%d%d%f%f%f%f", &stap, &deel, &r_o, &r_n, &t_frag, &grens); |
62 | if(grens!=0) w_g=1.5*grens; |
63 | b_test=1; |
64 | } |
65 | fclose(bestand); |
66 | } |
67 | |
68 | void menuopbeeld(void) |
69 | { clrscr(); |
70 | textcolor(10); |
71 | printf("[b]estandsnaam "); |
72 | if(b_test==0) printf("-"); else printf("+"); |
73 | printf(" : %s\n\n", b_naam); |
74 | printf("[c]o rdinaten\n"); |
75 | printf("[w]illekeur : %f\n", r_o); |
76 | printf("[r]ichting : %f\n\n", r_n); |
77 | printf("[t]ijdfragmentatie : %f\n", t_frag); |
78 | printf("[g]rens : %f\n\n", grens); |
79 | printf("[s]tappen : %d\n", stap); |
80 | printf("[d]eel : %d\n\n", deel); |
81 | printf("[v]enster : %f\n", w_g); |
82 | printf("[p]rojectie : %d\n", spoor); |
83 | printf("M goedmaken voor 3d: "); |
84 | //printf("[m]iddelpunt : "); |
85 | if(midd==0) printf("uit\n"); else printf("aan\n"); |
86 | printf("[k]leurmodus : "); |
87 | if(modus==0) printf("deel\n\n\n"); else printf("diepte\n\n\n"); |
88 | printf("[R]ekenen [E]n [T]ekenen [S]toppen\n\n"); |
89 | } |
90 | |
91 | void menuvraag(void) |
92 | { toets=getch(); |
93 | if(toets==98) { printf("Nieuwe bestandsnaam? "); |
94 | scanf("%s", &b_naam); } |
95 | if(toets==99) { printf("Invoer co rdinaten, nog programmeren..."); |
96 | getch(); } |
97 | if(toets==119) { f_temp=r_o; printf("Maximale willekeur? "); |
98 | scanf("%f", &r_o); |
99 | if(r_o<0||r_o==0||r_o>30000) r_o=f_temp; } |
100 | if(toets==114) { f_temp=r_n; printf("Maximale richting? "); |
101 | scanf("%f", &r_n); |
102 | if(r_n<0||r_o==0||r_o>2500) r_o=f_temp; } |
103 | if(toets==116) { f_temp=t_frag; printf("Nieuwe tijdfragmentatie? "); |
104 | scanf("%f", &t_frag); |
105 | if(t_frag<0||t_frag==0||t_frag>1) t_frag=f_temp; } |
106 | if(toets==103) { f_temp=grens; printf("Grens van ruimte? "); |
107 | scanf("%f", &grens); |
108 | if(grens<0||grens>32500) grens=f_temp; } |
109 | if(toets==115) { i_temp=stap; printf("Aantal stappen? "); |
110 | scanf("%d", &stap); |
111 | if(stap<1||stap>32500) stap=i_temp; } |
112 | if(toets==100) { i_temp=deel; printf("Aantal deeltjes? "); |
113 | scanf("%d", &deel); |
114 | if(deel<2||deel>1850) deel=i_temp; } |
115 | if(toets==118) { f_temp=w_g; printf("Venstergrootte? "); |
116 | scanf("%f", &w_g); |
117 | if(w_g<0||w_g==0||w_g>32500) w_g=f_temp; } |
118 | if(toets==112) { i_temp=spoor; printf("Aantal fragmenten? "); |
119 | scanf("%d", &spoor); |
120 | if(spoor<0||spoor>30) spoor=i_temp; } |
121 | if(toets==109) { if(midd==0) midd=1; else midd=0; } |
122 | if(toets==107) { if(modus==0) modus=1; else modus=0; } |
123 | } |
124 | |
125 | void willekeur(void) |
126 | { for(t1=0;t1 |
127 | { x3[t1][0]=2*(random(32767)*r_o/32767)-r_o; |
128 | y3[t1][0]=2*(random(32767)*r_o/32767)-r_o; |
129 | z3[t1][0]=2*(random(32767)*r_o/32767)-r_o; |
130 | x3[t1][1]=x3[t1][0]+2*(random(32767)*r_n/32767)-r_n; |
131 | y3[t1][1]=y3[t1][0]+2*(random(32767)*r_n/32767)-r_n; |
132 | z3[t1][1]=z3[t1][0]+2*(random(32767)*r_n/32767)-r_n; |
133 | } |
134 | } |
135 | |
136 | void reken(void) // Kaal [R]ekenen, snelste routine. |
137 | { // Bestand voor co rdinaten openen. |
138 | bestand=fopen(b_naam,"w"); |
139 | fprintf(bestand, "%d %d %f %f %f %f", stap, deel, r_o, r_n, t_frag, grens); |
140 | for(t1=0;t1 |
141 | fprintf(bestand, " %f %f %f", x3[t1][1], y3[t1][1], z3[t1][1]); |
142 | |
143 | // Co rdinaten berekenen, schrijven naar disk en naar tekst-beeldscherm. |
144 | for(t1=0;t1 |
145 | { for(t2=0;t2 |
146 | { x3[t2][3]=0; |
147 | y3[t2][3]=0; |
148 | z3[t2][3]=0; |
149 | } |
150 | for(t2=0;t2 |
151 | { x3[t2][2]=x3[t2][1]-x3[t2][0]; |
152 | y3[t2][2]=y3[t2][1]-y3[t2][0]; |
153 | z3[t2][2]=z3[t2][1]-z3[t2][0]; |
154 | for(t3=t2;t3 |
155 | { fzx=x3[t3][1]-x3[t2][1]; |
156 | fzy=y3[t3][1]-y3[t2][1]; |
157 | fzz=z3[t3][1]-z3[t2][1]; |
158 | if(fzx!=0) { fzx=1/fzx; x3[t2][3]=x3[t2][3]+fzx; |
159 | x3[t3][3]=x3[t3][3]-fzx; } |
160 | if(fzy!=0) { fzy=1/fzy; y3[t2][3]=y3[t2][3]+fzy; |
161 | y3[t3][3]=y3[t3][3]-fzy; } |
162 | if(fzz!=0) { fzz=1/fzz; z3[t2][3]=z3[t2][3]+fzz; |
163 | z3[t3][3]=z3[t3][3]-fzz; } |
164 | } |
165 | x3[t2][0]=x3[t2][1]; |
166 | y3[t2][0]=y3[t2][1]; |
167 | z3[t2][0]=z3[t2][1]; |
168 | x3[t2][1]=x3[t2][0]+x3[t2][2]+x3[t2][3]; |
169 | y3[t2][1]=y3[t2][0]+y3[t2][2]+y3[t2][3]; |
170 | z3[t2][1]=z3[t2][0]+z3[t2][2]+z3[t2][3]; |
171 | } |
172 | for(t2=0;t2 |
173 | fprintf(bestand, " %f %f %f", x3[t2][1], y3[t2][1], z3[t2][1]); |
174 | putchar(13); printf("%d",t1+1); |
175 | } |
176 | fclose(bestand); |
177 | b_test=1; |
178 | } |
179 | |
180 | void rekenmetopties(void) // [R]ekenen met grens en/of t_frag aan. |
181 | { // Bestand voor co rdinaten openen. |
182 | bestand=fopen(b_naam,"w"); |
183 | fprintf(bestand, "%d %d %f %f %f %f", stap, deel, r_o, r_n, t_frag, grens); |
184 | for(t1=0;t1 |
185 | fprintf(bestand, " %f %f %f", x3[t1][1], y3[t1][1], z3[t1][1]); |
186 | |
187 | // Co rdinaten berekenen, schrijven naar disk en naar tekst-beeldscherm. |
188 | for(t1=0;t1 |
189 | { for(t2=0;t2 |
190 | { x3[t2][3]=0; |
191 | y3[t2][3]=0; |
192 | z3[t2][3]=0; |
193 | } |
194 | for(t2=0;t2 |
195 | { x3[t2][2]=x3[t2][1]-x3[t2][0]; |
196 | y3[t2][2]=y3[t2][1]-y3[t2][0]; |
197 | z3[t2][2]=z3[t2][1]-z3[t2][0]; |
198 | for(t3=t2;t3 |
199 | { fzx=x3[t3][1]-x3[t2][1]; |
200 | fzy=y3[t3][1]-y3[t2][1]; |
201 | fzz=z3[t3][1]-z3[t2][1]; |
202 | if(fzx!=0) { fzx=1/fzx; x3[t2][3]=x3[t2][3]+fzx; |
203 | x3[t3][3]=x3[t3][3]-fzx; } |
204 | if(fzy!=0) { fzy=1/fzy; y3[t2][3]=y3[t2][3]+fzy; |
205 | y3[t3][3]=y3[t3][3]-fzy; } |
206 | if(fzz!=0) { fzz=1/fzz; z3[t2][3]=z3[t2][3]+fzz; |
207 | z3[t3][3]=z3[t3][3]-fzz; } |
208 | } |
209 | // Bewerk co rdinaten als t_frag ongelijk aan 1. |
210 | if(t_frag!=1) |
211 | { x3[t2][2]=x3[t2][2]*t_frag; x3[t2][3]=x3[t2][3]*t_frag; |
212 | y3[t2][2]=y3[t2][2]*t_frag; y3[t2][3]=y3[t2][3]*t_frag; |
213 | z3[t2][2]=z3[t2][2]*t_frag; z3[t2][3]=z3[t2][3]*t_frag; |
214 | } |
215 | // Bepaal de nieuwe co rdinaten. |
216 | x3[t2][0]=x3[t2][1]; |
217 | y3[t2][0]=y3[t2][1]; |
218 | z3[t2][0]=z3[t2][1]; |
219 | x3[t2][1]=x3[t2][0]+x3[t2][2]+x3[t2][3]; |
220 | y3[t2][1]=y3[t2][0]+y3[t2][2]+y3[t2][3]; |
221 | z3[t2][1]=z3[t2][0]+z3[t2][2]+z3[t2][3]; |
222 | // Test grensoverschrijding. |
223 | if(grens>0) |
224 | { if(x3[t2][1]<-grens||x3[t2][1]>grens) |
225 | { g_temp=x3[t2][1]; x3[t2][1]=-x3[t2][0]; x3[t2][0]=-g_temp; } |
226 | if(y3[t2][1]<-grens||y3[t2][1]>grens) |
227 | { g_temp=y3[t2][1]; y3[t2][1]=-y3[t2][0]; y3[t2][0]=-g_temp; } |
228 | if(z3[t2][1]<-grens||z3[t2][1]>grens) |
229 | { g_temp=z3[t2][1]; z3[t2][1]=-z3[t2][0]; z3[t2][0]=-g_temp; } |
230 | } |
231 | } |
232 | for(t2=0;t2 |
233 | fprintf(bestand, " %f %f %f", x3[t2][1], y3[t2][1], z3[t2][1]); |
234 | putchar(13); printf("%d",t1+1); |
235 | } |
236 | fclose(bestand); |
237 | b_test=1; |
238 | } |
239 | |
240 | void rekenenteken(void) // [E]n. |
241 | { t1=0; t2=2639; |
242 | installuserdriver("Svga256",DetectSvga256); |
243 | initgraph(&t1,&t2,""); |
244 | w_x=(x_max+1)/(w_g*2); w_y=(y_max+1)/(w_g*2); |
245 | printf(" |%d|%d|%f|%f|%f|%f|%f|%d|%s", |
246 | stap, deel, r_o, r_n, t_frag, grens, w_g, spoor, b_naam); |
247 | gotoxy(0,0); |
248 | midd=0; spoor=0; modus=0; |
249 | |
250 | // Bestand voor co rdinaten openen. |
251 | bestand=fopen(b_naam,"w"); |
252 | fprintf(bestand, "%d %d %f %f %f %f", stap, deel, r_o, r_n, t_frag, grens); |
253 | for(t1=0;t1 |
254 | fprintf(bestand, " %f %f %f", x3[t1][1], y3[t1][1], z3[t1][1]); |
255 | |
256 | // Co rdinaten berekenen, schrijven naar disk en naar grafisch beeldscherm. |
257 | for(t1=0;t1 |
258 | { for(t2=0;t2 |
259 | { x3[t2][3]=0; |
260 | y3[t2][3]=0; |
261 | z3[t2][3]=0; |
262 | } |
263 | for(t2=0;t2 |
264 | { x3[t2][2]=x3[t2][1]-x3[t2][0]; |
265 | y3[t2][2]=y3[t2][1]-y3[t2][0]; |
266 | z3[t2][2]=z3[t2][1]-z3[t2][0]; |
267 | for(t3=t2;t3 |
268 | { fzx=x3[t3][1]-x3[t2][1]; |
269 | fzy=y3[t3][1]-y3[t2][1]; |
270 | fzz=z3[t3][1]-z3[t2][1]; |
271 | if(fzx!=0) { fzx=1/fzx; x3[t2][3]=x3[t2][3]+fzx; |
272 | x3[t3][3]=x3[t3][3]-fzx; } |
273 | if(fzy!=0) { fzy=1/fzy; y3[t2][3]=y3[t2][3]+fzy; |
274 | y3[t3][3]=y3[t3][3]-fzy; } |
275 | if(fzz!=0) { fzz=1/fzz; z3[t2][3]=z3[t2][3]+fzz; |
276 | z3[t3][3]=z3[t3][3]-fzz; } |
277 | } |
278 | // Bewerk co rdinaten als t_frag ongelijk aan 1. |
279 | if(t_frag!=1) |
280 | { x3[t2][2]=x3[t2][2]*t_frag; x3[t2][3]=x3[t2][3]*t_frag; |
281 | y3[t2][2]=y3[t2][2]*t_frag; y3[t2][3]=y3[t2][3]*t_frag; |
282 | z3[t2][2]=z3[t2][2]*t_frag; z3[t2][3]=z3[t2][3]*t_frag; |
283 | } |
284 | // Bepaal de nieuwe co rdinaten. |
285 | x3[t2][0]=x3[t2][1]; |
286 | y3[t2][0]=y3[t2][1]; |
287 | z3[t2][0]=z3[t2][1]; |
288 | x3[t2][1]=x3[t2][0]+x3[t2][2]+x3[t2][3]; |
289 | y3[t2][1]=y3[t2][0]+y3[t2][2]+y3[t2][3]; |
290 | z3[t2][1]=z3[t2][0]+z3[t2][2]+z3[t2][3]; |
291 | // Test grensoverschrijding. |
292 | if(grens>0) |
293 | { if(x3[t2][1]<-grens||x3[t2][1]>grens) |
294 | { g_temp=x3[t2][1]; x3[t2][1]=-x3[t2][0]; x3[t2][0]=-g_temp; } |
295 | if(y3[t2][1]<-grens||y3[t2][1]>grens) |
296 | { g_temp=y3[t2][1]; y3[t2][1]=-y3[t2][0]; y3[t2][0]=-g_temp; } |
297 | if(z3[t2][1]<-grens||z3[t2][1]>grens) |
298 | { g_temp=z3[t2][1]; z3[t2][1]=-z3[t2][0]; z3[t2][0]=-g_temp; } |
299 | } |
300 | } |
301 | for(t2=0;t2 |
302 | fprintf(bestand, " %f %f %f", x3[t2][1], y3[t2][1], z3[t2][1]); |
303 | for(t2=0;t2 |
304 | { x2[t2][0]=y3[t2][1]-x3[t2][1]; |
305 | y2[t2][0]=-z3[t2][1]+x3[t2][1]/2; |
306 | x2[t2][0]=x_max/2-w_x*x2[t2][0]; |
307 | y2[t2][0]=y_max/2-w_y*y2[t2][0]; |
308 | putpixel(x2[t2][0],y2[t2][0],2+t2); |
309 | } |
310 | putchar(13); printf("%d",t1+1); |
311 | } |
312 | putchar(13); printf("Klaar"); |
313 | fclose(bestand); |
314 | b_test=1; |
315 | getch(); |
316 | closegraph(); |
317 | } |
318 | |
319 | void geendisk(void) // [A]lleen rekenen en tekenen. |
320 | { t1=0; t2=2639; |
321 | installuserdriver("Svga256",DetectSvga256); |
322 | initgraph(&t1,&t2,""); |
323 | w_x=(x_max+1)/(w_g*2); w_y=(y_max+1)/(w_g*2); |
324 | if(modus!=0) diepte=255/(w_g*2); |
325 | |
326 | printf(" |%d|%d|%f|%f|%f|%f|%f|%d|XXXXXX", |
327 | stap, deel, r_o, r_n, t_frag, grens, w_g, spoor); |
328 | gotoxy(0,0); |
329 | |
330 | // Co rdinaten berekenen, schrijven naar grafisch beeldscherm. |
331 | for(t1=0;t1 |
332 | { for(t2=0;t2 |
333 | { x3[t2][3]=0; |
334 | y3[t2][3]=0; |
335 | z3[t2][3]=0; |
336 | } |
337 | putchar(13);printf("%d", t1); |
338 | if(midd>0) { midx=0; midy=0; } |
339 | for(t2=0;t2 |
340 | { x3[t2][2]=x3[t2][1]-x3[t2][0]; |
341 | y3[t2][2]=y3[t2][1]-y3[t2][0]; |
342 | z3[t2][2]=z3[t2][1]-z3[t2][0]; |
343 | for(t3=t2;t3 |
344 | { fzx=x3[t3][1]-x3[t2][1]; |
345 | fzy=y3[t3][1]-y3[t2][1]; |
346 | fzz=z3[t3][1]-z3[t2][1]; |
347 | if(fzx!=0) { fzx=1/fzx; x3[t2][3]=x3[t2][3]+fzx; |
348 | x3[t3][3]=x3[t3][3]-fzx; } |
349 | if(fzy!=0) { fzy=1/fzy; y3[t2][3]=y3[t2][3]+fzy; |
350 | y3[t3][3]=y3[t3][3]-fzy; } |
351 | if(fzz!=0) { fzz=1/fzz; z3[t2][3]=z3[t2][3]+fzz; |
352 | z3[t3][3]=z3[t3][3]-fzz; } |
353 | } |
354 | // Bewerk co rdinaten als t_frag ongelijk aan 1. |
355 | if(t_frag!=1) |
356 | { x3[t2][2]=x3[t2][2]*t_frag; x3[t2][3]=x3[t2][3]*t_frag; |
357 | y3[t2][2]=y3[t2][2]*t_frag; y3[t2][3]=y3[t2][3]*t_frag; |
358 | z3[t2][2]=z3[t2][2]*t_frag; z3[t2][3]=z3[t2][3]*t_frag; |
359 | } |
360 | // Bepaal de nieuwe co rdinaten. |
361 | x3[t2][0]=x3[t2][1]; |
362 | y3[t2][0]=y3[t2][1]; |
363 | z3[t2][0]=z3[t2][1]; |
364 | x3[t2][1]=x3[t2][0]+x3[t2][2]+x3[t2][3]; |
365 | y3[t2][1]=y3[t2][0]+y3[t2][2]+y3[t2][3]; |
366 | z3[t2][1]=z3[t2][0]+z3[t2][2]+z3[t2][3]; |
367 | // Test grensoverschrijding. |
368 | if(grens>0) |
369 | { if(x3[t2][1]<-grens||x3[t2][1]>grens) |
370 | { g_temp=x3[t2][1]; x3[t2][1]=-x3[t2][0]; x3[t2][0]=-g_temp; } |
371 | if(y3[t2][1]<-grens||y3[t2][1]>grens) |
372 | { g_temp=y3[t2][1]; y3[t2][1]=-y3[t2][0]; y3[t2][0]=-g_temp; } |
373 | if(z3[t2][1]<-grens||z3[t2][1]>grens) |
374 | { g_temp=z3[t2][1]; z3[t2][1]=-z3[t2][0]; z3[t2][0]=-g_temp; } |
375 | } |
376 | } |
377 | for(t2=0;t2 |
378 | { x2[t2][0]=y3[t2][1]-x3[t2][1]; |
379 | y2[t2][0]=-z3[t2][1]+x3[t2][1]/2; |
380 | if(midd>0) |
381 | { midx=midx+x2[t2][0]; |
382 | midy=midy+y2[t2][0]; |
383 | } |
384 | } |
385 | if(midd>0) { midx=midx/deel; midy=midy/deel; } |
386 | for(t2=0;t2 |
387 | { if(midd>0) |
388 | { x2[t2][0]=x_max/2+midx-w_x*x2[t2][0]; |
389 | y2[t2][0]=y_max/2+midy-w_y*y2[t2][0]; |
390 | } |
391 | else |
392 | { x2[t2][0]=x_max/2-w_x*x2[t2][0]; |
393 | y2[t2][0]=y_max/2-w_y*y2[t2][0]; |
394 | } |
395 | if(modus==0) putpixel(x2[t2][0],y2[t2][0],2+t2); |
396 | else putpixel(x2[t2][0],y2[t2][0],1+(x3[t2][1]+w_g)*diepte); |
397 | if(spoor>0) |
398 | { if(t1 |
399 | { x2[t2][spoor-1-t1]=x2[t2][0]; y2[t2][spoor-1-t1]=y2[t2][0]; } |
400 | else |
401 | { putpixel(x2[t2][spoor-1],y2[t2][spoor-1],0); |
402 | for(t3=spoor-1;t3>0;t3--) |
403 | { x2[t2][t3]=x2[t2][t3-1]; y2[t2][t3]=y2[t2][t3-1]; } |
404 | } |
405 | } |
406 | } |
407 | putchar(13); printf("%d",t1+1); |
408 | } |
409 | putchar(13); printf("Klaar"); |
410 | getch(); |
411 | closegraph(); |
412 | } |
413 | |
414 | void teken(void) |
415 | { t1=0; t2=2639; |
416 | installuserdriver("Svga256",DetectSvga256); |
417 | initgraph(&t1,&t2,""); |
418 | |
419 | // Berekenen hoeveelheid pixels per nheid. |
420 | w_x=(x_max+1)/(w_g*2); w_y=(y_max+1)/(w_g*2); |
421 | |
422 | bestand=fopen(b_naam,"r"); |
423 | fscanf(bestand, "%d%d%f%f%f%f", &stap, &deel, &r_o, &r_n, &t_frag, &grens); |
424 | printf(" |%d|%d|%f|%f|%f|%f|%f|%d|%s", |
425 | stap, deel, r_o, r_n, t_frag, grens, w_g, spoor, b_naam); |
426 | |
427 | if(modus!=0) diepte=255/(w_g*2); |
428 | for(t1=0;t1 |
429 | { putchar(13);printf("%d", t1); |
430 | if(midd>0) { midx=0; midy=0; } |
431 | for(t2=0;t2 |
432 | fscanf(bestand, "%f%f%f", &x3[t2][1], &y3[t2][1], &z3[t2][1]); |
433 | for(t2=0;t2 |
434 | { x2[t2][0]=y3[t2][1]-x3[t2][1]; |
435 | y2[t2][0]=-z3[t2][1]+x3[t2][1]/2; |
436 | if(midd>0) |
437 | { midx=midx+x2[t2][0]; |
438 | midy=midy+y2[t2][0]; |
439 | } |
440 | } |
441 | if(midd>0) { midx=midx/deel; midy=midy/deel; } |
442 | for(t2=0;t2 |
443 | { if(midd>0) |
444 | { x2[t2][0]=x_max/2+midx-w_x*x2[t2][0]; |
445 | y2[t2][0]=y_max/2+midy-w_y*y2[t2][0]; |
446 | } |
447 | else |
448 | { x2[t2][0]=x_max/2-w_x*x2[t2][0]; |
449 | y2[t2][0]=y_max/2-w_y*y2[t2][0]; |
450 | } |
451 | if(modus==0) putpixel(x2[t2][0],y2[t2][0],2+t2); |
452 | else putpixel(x2[t2][0],y2[t2][0],1+(x3[t2][1]+w_g)*diepte); |
453 | if(spoor>0) |
454 | { if(t1 |
455 | { x2[t2][spoor-1-t1]=x2[t2][0]; y2[t2][spoor-1-t1]=y2[t2][0]; } |
456 | else |
457 | { putpixel(x2[t2][spoor-1],y2[t2][spoor-1],0); |
458 | for(t3=spoor-1;t3>0;t3--) |
459 | { x2[t2][t3]=x2[t2][t3-1]; y2[t2][t3]=y2[t2][t3-1]; } |
460 | } |
461 | } |
462 | } |
463 | } |
464 | putchar(13); printf("Klaar"); |
465 | fclose(bestand); |
466 | getch(); |
467 | closegraph(); |
468 | } |
469 | |
470 | void main(void) |
471 | { // Beginwaarden zetten. |
472 | stap=250; deel=3; r_o=100; r_n=.0001; t_frag=1; grens=0; w_g=500; spoor=0; |
473 | midd=0; spoor=0; modus=0; |
474 | clrscr(); textcolor(10); |
475 | |
476 | // Grafische modus bepalen. |
477 | t1=0; t2=2639; |
478 | installuserdriver("Svga256",DetectSvga256); |
479 | initgraph(&t1,&t2,""); |
480 | x_max=getmaxx(); y_max=getmaxy(); |
481 | closegraph(); |
482 | |
483 | // Test of standaard bestand bestaat. |
484 | strcpy(b_naam, "bestand.xyz"); |
485 | b_test=0; |
486 | varbestand(); |
487 | |
488 | // Begin programma-lus. |
489 | prog=1; |
490 | do |
491 | { menuopbeeld(); |
492 | toets=0; |
493 | menuvraag(); |
494 | // [b]estandsnaam. |
495 | if(toets==98) varbestand(); |
496 | // [R]eken. |
497 | if(toets==82) |
498 | { if(b_test==1) |
499 | { printf("Bestand %s overschrijven? [j/n] ", b_naam); |
500 | i_temp=getch(); |
501 | putchar(13); printf(" "); |
502 | putchar(13); |
503 | if(i_temp==106) b_test=0; |
504 | } |
505 | if(b_test==0) |
506 | { willekeur(); |
507 | if(grens>0||t_frag!=1) rekenmetopties(); else reken(); |
508 | } |
509 | } |
510 | if(toets==69) |
511 | { if(b_test==1) |
512 | { printf("Bestand %s overschrijven? [j/n] ", b_naam); |
513 | i_temp=getch(); |
514 | putchar(13); printf(" "); |
515 | putchar(13); |
516 | if(i_temp==106) b_test=0; |
517 | } |
518 | if(b_test==0) |
519 | { willekeur(); |
520 | rekenenteken(); |
521 | } |
522 | } |
523 | // [T]eken. |
524 | if(toets==84) teken(); |
525 | if(toets==65) { willekeur(); geendisk(); } |
526 | if(toets==81) theorie(); |
527 | if(toets==63) { printf("Bedacht en geschreven door G.J.Smit."); |
528 | getch(); } |
529 | if(toets==83) prog=0; |
530 | } while(prog>0); |
531 | } |
532 |