DEFDBL A-Z ' SR.BAS ' Revision 1.0 25 Jan 2001 CLS SCREEN 12 C = 300000: c2 = C * C c40 = 45 sx = 60 / C ly = 180 dt = 3 L0 = 300000 v1 = L0 / dt v2 = v1 * 2 'rest frame l1 = L0 * SQR(1 - (v1 * v1) / c2) l2 = L0 * SQR(1 - (v2 * v2) / c2) state = -1 DO LOCATE 1, 1 INPUT "state ? (0 = HELP, 1 to 3 = DEMO'S) "; a$ IF a$ <> "" THEN nstate = VAL(a$) IF nstate >= 0 AND nstate <= 3 THEN state = nstate ELSE END ELSE state = state + 1 END IF ' PRINT nstate, state: END IF state = 2 THEN ntrain = 2 ELSE ntrain = 1 CLS SELECT CASE state CASE 0 LOCATE 2, 1 PRINT "This program demonstrates three demo's" PRINT "In demo 1 there are 4 trains" PRINT "In demo 2 there are 6 trains" PRINT "In demo 3 there are 4 trains" PRINT "In each demo you see the position of those trains at 5 moments" PRINT PRINT "In demo 1 there are 4 trains" COLOR 7 PRINT "Train 1 stays at rest all the time" PRINT "The three other move to the right." PRINT "At t=6 this situation changes for the trains 3 and 4." PRINT "At t=9 in the rest frame of the track "; COLOR 15: PRINT "(of train 1)" COLOR 7: PRINT " train 2 continues at the same speed " PRINT " train 3 stops and train 4 moves at double speed" PRINT "At t=9 in the rest frame of the track "; COLOR 15: PRINT "(of train 2)" COLOR 7: PRINT " the speed of train 2 is zero" PRINT " train 3 moves to the left and train 4 moves to the right" COLOR 15 PRINT PRINT "In demo 2 there are 2 extra trains" PRINT PRINT "Demo 3 is almost identical as Demo 1," PRINT "except that at t=0 the trains 3 and 4 are at different positions" COLOR 7 PRINT "At t = 6 the situation changes " PRINT "At t = 9 train 3 moves to the right and train 4 to the left" PRINT "at t = 12 the trains 3 and 4 are at the same position." PRINT "The length of the trains are not equal in the frame of the track of train 1" PRINT "Are they equal in the frame of the track of train 2 ?" COLOR 15 PRINT "HIT ENTER TO SEE ALL THE 3 DEMO's"; CASE 1, 2 t1 = 0: t2 = 0: t3 = 0: t4 = 0 pos1 = L0 pos2 = pos1: pos3 = pos1: pos4 = pos1 FOR t = 0 TO 5 LOCATE 10 + 3 * t, 1: PRINT t * dt IF t = 0 THEN v11 = 0 v21 = 0 v31 = 0 L11 = L0 l21 = L0 l31 = L0 ELSE IF t <= 2 THEN v11 = v1 v21 = v1 L11 = l1 l21 = l1 l31 = l1 v31 = v1 ELSE v21 = v2 l21 = l2 l31 = L0 v31 = 0 END IF END IF IF t > 0 THEN t2 = t2 + dt * SQR(1 - (v11 * v11) / c2) t1 = t * dt pos2 = pos2 + v11 * dt '= pos1 + l0 * t pos3 = pos3 + v21 * dt pos4 = pos4 + v31 * dt t3 = t3 + dt * SQR(1 - (v21 * v21) / c2) t4 = t4 + dt * SQR(1 - (v31 * v31) / c2) pos2rel = pos2 - pos2 pos3rel = pos3 - pos2 pos4rel = pos4 - pos2 END IF ' PRINT pos2; l1 x10 = (pos1 - L0 / 2) * sx ' train 1 x20 = (pos1 + L0 / 2) * sx ' train 1 x11 = (pos2 - L11 / 2) * sx ' train 2 x21 = (pos2 + L11 / 2) * sx ' train 2 x31 = (pos2 + L0 - L11 / 2) * sx ' train 2 set 2 x41 = (pos2 + L0 + L11 / 2) * sx ' train 2 set 2 x12 = (pos3 - l21 / 2) * sx ' train 3 x22 = (pos3 + l21 / 2) * sx ' train 3 x32 = (pos3 + L0 - l21 / 2) * sx ' train 3 x42 = (pos3 + L0 + l21 / 2) * sx ' train 3 x13 = (pos4 - l31 / 2) * sx ' train 4 x23 = (pos4 + l31 / 2) * sx ' train 4 COLOR 15 LOCATE 2, 1: PRINT TAB(8); "Length"; TAB(20); "v train"; PRINT TAB(30); "train time"; PRINT TAB(42); "rel distance" COLOR 6 LOCATE 3, 1: PRINT "Train 1 "; L0; TAB(20); PRINT USING "#######"; 0; TAB(30); PRINT USING "##.####"; t1 COLOR 15 LOCATE 4, 1: PRINT "Train 2 "; INT(l1); TAB(20); PRINT USING "#######"; v11; TAB(30); PRINT USING "##.####"; t2; TAB(40); PRINT USING "########"; pos2rel COLOR 14 LOCATE 5, 1: PRINT "Train 3 "; INT(l21); TAB(20); PRINT USING "#######"; v21; TAB(30); PRINT USING "##.####"; t3; TAB(40); PRINT USING "########"; pos3rel COLOR 13 LOCATE 6, 1: PRINT "Train 4 "; INT(l31); TAB(20); PRINT USING "#######"; v31; TAB(30); PRINT USING "##.####"; t4; TAB(40); PRINT USING "########"; pos4rel ' Train 1 x100 = x10: x200 = x20 FOR tx = 0 TO t + 1 COLOR 7 IF tx = 0 THEN COLOR 6 LINE (x100, ly + t * c40)-(x200, ly + t * c40) LINE (x100, ly + t * c40 - 2)-(x100, ly + t * c40 + 2) LINE (x200, ly + t * c40 - 2)-(x200, ly + t * c40 + 2) x100 = x200 x200 = x200 + L0 * sx NEXT tx ' Train 2 x110 = x11 x210 = x21 tend = t - 2 IF tend < 0 THEN tend = 0 FOR tx = 0 TO tend COLOR 15 IF tx <> 0 THEN COLOR 7 LINE (x110, ly - 7 + t * c40)-(x210, ly - 7 + t * c40) LINE (x110, ly - 7 + t * c40 - 2)-(x110, ly - 7 + t * c40 + 2) LINE (x210, ly - 7 + t * c40 - 2)-(x210, ly - 7 + t * c40 + 2) x210 = x110 x110 = x110 - l1 * sx NEXT tx x110 = x11 x210 = x21 FOR tx = 0 TO tend COLOR 15 IF tx <> 0 THEN COLOR 7 LINE (x110, ly - 7 + t * c40)-(x210, ly - 7 + t * c40) LINE (x110, ly - 7 + t * c40 - 2)-(x110, ly - 7 + t * c40 + 2) LINE (x210, ly - 7 + t * c40 - 2)-(x210, ly - 7 + t * c40 + 2) x110 = x210 x210 = x210 + l1 * sx NEXT tx IF ntrain = 2 THEN COLOR 15 LINE (x31, ly - 7 + t * c40)-(x41, ly - 7 + t * c40) END IF ' Train 3 COLOR 14 LINE (x12, ly - 14 + t * c40)-(x22, ly - 14 + t * c40) IF ntrain = 2 THEN COLOR 14 LINE (x12, ly - 14 + t * c40 - 2)-(x12, ly - 14 + t * c40 + 2) LINE (x22, ly - 14 + t * c40 - 2)-(x22, ly - 14 + t * c40 + 2) LINE (x32, ly - 14 + t * c40)-(x42, ly - 14 + t * c40) END IF ' Train 4 COLOR 13 LINE (x13, ly - 21 + t * c40)-(x23, ly - 21 + t * c40) COLOR 7 PRINT "next time"; t; : INPUT a$ NEXT t CASE IS = 3 t1 = 0: t2 = 0: t3 = 0: t4 = 0 pos1 = 3 * L0 pos2 = pos1: pos3 = L0: pos4 = 5 * L0 FOR t = 0 TO 5 LOCATE 10 + 3 * t, 1: PRINT t * dt IF t = 0 THEN v11 = 0 v21 = 0 v31 = 0 L11 = L0 l21 = L0 l31 = L0 ELSE IF t <= 2 THEN v11 = v1 v21 = v1 L11 = l1 l21 = l1 l31 = l1 v31 = v1 ELSE v21 = v2 l21 = l2 l31 = L0 v31 = 0 END IF END IF IF t > 0 THEN t2 = t2 + dt * SQR(1 - (v11 * v11) / c2) t1 = t * dt pos2 = pos2 + v11 * dt '= pos1 + l0 * t pos3 = pos3 + v21 * dt pos4 = pos4 + v31 * dt t3 = t3 + dt * SQR(1 - (v21 * v21) / c2) t4 = t4 + dt * SQR(1 - (v31 * v31) / c2) pos2rel = pos2 - pos2 pos3rel = pos3 - pos2 pos4rel = pos4 - pos2 END IF ' PRINT pos2; l1 x10 = (pos1 - L0 / 2) * sx ' train 1 x20 = (pos1 + L0 / 2) * sx ' train 1 x11 = (pos2 - L11 / 2) * sx ' train 2 x21 = (pos2 + L11 / 2) * sx ' train 2 x31 = (pos2 + L0 - L11 / 2) * sx ' train 2 set 2 x41 = (pos2 + L0 + L11 / 2) * sx ' train 2 set 2 x12 = (pos3 - l21 / 2) * sx ' train 3 x22 = (pos3 + l21 / 2) * sx ' train 3 x32 = (pos3 + L0 - l21 / 2) * sx ' train 3 x42 = (pos3 + L0 + l21 / 2) * sx ' train 3 x13 = (pos4 - l31 / 2) * sx ' train 4 x23 = (pos4 + l31 / 2) * sx ' train 4 COLOR 15 LOCATE 2, 1: PRINT TAB(8); "Length"; TAB(20); "v train"; PRINT TAB(30); "train time"; PRINT TAB(42); "rel distance" COLOR 6 LOCATE 3, 1: PRINT "Train 1 "; L0; TAB(20); PRINT USING "#######"; 0; TAB(30); PRINT USING "##.####"; t1 COLOR 15 LOCATE 4, 1: PRINT "Train 2 "; INT(l1); TAB(20); PRINT USING "#######"; v11; TAB(30); PRINT USING "##.####"; t2; TAB(40); PRINT USING "########"; pos2rel COLOR 14 LOCATE 5, 1: PRINT "Train 3 "; INT(l21); TAB(20); PRINT USING "#######"; v21; TAB(30); PRINT USING "##.####"; t3; TAB(40); PRINT USING "########"; pos3rel COLOR 13 LOCATE 6, 1: PRINT "Train 4 "; INT(l31); TAB(20); PRINT USING "#######"; v31; TAB(30); PRINT USING "##.####"; t4; TAB(40); PRINT USING "########"; pos4rel ' Train 1 x100 = x10: x200 = x20 FOR tx = 0 TO t + 1 COLOR 7 IF tx = 0 THEN COLOR 6 LINE (x100, ly + t * c40)-(x200, ly + t * c40) LINE (x100, ly + t * c40 - 2)-(x100, ly + t * c40 + 2) LINE (x200, ly + t * c40 - 2)-(x200, ly + t * c40 + 2) x100 = x200 x200 = x200 + L0 * sx NEXT tx ' Train 2 x110 = x11 x210 = x21 tend = t - 2 IF tend < 0 THEN tend = 0 FOR tx = 0 TO tend + 2 COLOR 15 IF tx <> 0 THEN COLOR 7 LINE (x110, ly - 7 + t * c40)-(x210, ly - 7 + t * c40) LINE (x110, ly - 7 + t * c40 - 2)-(x110, ly - 7 + t * c40 + 2) LINE (x210, ly - 7 + t * c40 - 2)-(x210, ly - 7 + t * c40 + 2) x210 = x110 x110 = x110 - l1 * sx NEXT tx x110 = x11 x210 = x21 FOR tx = 0 TO tend + 2 COLOR 15 IF tx <> 0 THEN COLOR 7 LINE (x110, ly - 7 + t * c40)-(x210, ly - 7 + t * c40) LINE (x110, ly - 7 + t * c40 - 2)-(x110, ly - 7 + t * c40 + 2) LINE (x210, ly - 7 + t * c40 - 2)-(x210, ly - 7 + t * c40 + 2) x110 = x210 x210 = x210 + l1 * sx NEXT tx ' Train 3 COLOR 14 LINE (x12, ly - 14 + t * c40)-(x22, ly - 14 + t * c40) ' Train 4 COLOR 13 LINE (x13, ly - 21 + t * c40)-(x23, ly - 21 + t * c40) COLOR 7 PRINT "next time"; t; : INPUT a$ NEXT t END SELECT LOOP UNTIL state >= 4