Tumbling QL animation

Anything QL Software or Programming Related.
EmmBee
Bent Pin Expansion Port
Posts: 81
Joined: Fri Jan 13, 2012 5:29 pm
Location: Kent

Tumbling QL animation

Postby EmmBee » Wed May 30, 2018 12:06 am

Hi everyone,
Some while ago, Steve Poole sent me his QL text tumbler program. This was previously here .. https://www.qlforum.co.uk/viewtopic.php ... ion#p17050
This program involves spending lots of time computing highly complex trigonometric values to calculate succeeding points to be drawn on the screen. Once the complete picture is ready, this is drawn on the screen, and a pause is used to allow this to be seen. Because the array variables will have to be used again, the drawing is temporarily erased. The same work is carried out as before. Arriving back again at this point in the loop, the drawing is made again. The one saving grace is that QPC2 is very fast at its work, and the net outcome looks quite good.

There seems to be a better way of doing this work. After the drawing is made, the details are copied to another array. The drawing is not erased at this point, but the program continues on its way and calculates the next set of values. When the time arrives, the drawing is erased using the stored values and is followed immediately by drawing in the new set of values. These new values are again copied into the stored array, and the process continues. This turns out to produce a much better visual image. The speed of operation is not very important, at all. In fact, some pauses have to be included in the code to slow it down.

I have also included some random factors to jumble up the paths taken.

Code: Select all

100 REMark TEXT-TUMBLER. Perspective Animation. by S.Poole. v30may2000
110 ng = 0 : rs = 50 : slp = 0 : qz = rs*TAN(RAD(slp)) : scy = .5 : Nb = 13
120 DIM XXX(Nb), YYY(Nb), ZZZ(Nb), mmm(Nb), nnn(Nb), sss(Nb), ttt(Nb)
130 Xaxis = 1 : Yaxis = 2 : Zaxis = 3
140 r90 = RAD(90) : r180 = PI : r270 = RAD(270) : r360 = PI*2 : ww = 512 : wh = 256
150 WINDOW ww,wh,0,0 : PAPER 0 : CLS
160 scx = .75*scy*(ww/wh) : SCALE scy, -scx/2, -scy/2
170 Sys = 163840 : IF VER$="JSL1" OR VER$="HBA" : Sys = VER$(-2)
180 RANDOMISE : LASTKEY = Sys+139 : Esc = 27
190 REPeat loop
200  IF RND(1)
210   T1 = 0 : T2 = r360 : T3 = PI/50
220  ELSE
230   T1 = r360 : T2 = .1 : T3 = -PI/50
240  END IF
250  ik = RND(4 TO 7) : delay = RND(1 TO 3)
260  sc = RND(1 TO 6)
270  SELect ON sc
280  = 1 : aa = .5  : bb = -.375 : cc = -.25 : REMark original - goes off screen
290  = 2 : aa = .9  : bb = -.9   : cc = -.55 : REMark all fits in
300  = 3 : aa = 1.2 : bb = -1    : cc = -.92 : REMark top
310  = 4 : aa = 1   : bb = -1    : cc = -.55 : REMark middle
320  = 5 : aa = 1   : bb = -1    : cc = -.27 : REMark bottom
330  = 6 : aa = 1.1 : bb = -.9   : cc = -.45 : REMark smaller than 2
340  END SELect
350  INK  0 : LINES sss,ttt
360  SCALE aa,bb,cc
370  FOR nx = -9 TO 9 STEP 9, 3 TO -3 STEP -3
380   cx=nx: cy=scy+nx*2: cz=qz*-10: tz=qz+nx*20
390   tx=(rs*SIN(RAD(ng-180)))+cx: ty=(rs*COS(RAD(ng-180)))+cy: Fx=cx-tx: fy=cy-ty
400   fh=((Fx^2)+(fy^2))^.5: fz=cz-tz: c=ATAN_((fy),(Fx)): b=ATAN_((fz),(fh))
410   RESTORE
420   FOR f = 1 TO Nb : READ XXX(f),YYY(f),ZZZ(f)
430   FOR axis = 3 TO 1 STEP -1
440    FOR thru = T1 TO T2 STEP T3
450     FOR f = 1 TO Nb
460      rotate (axis),(thru),(XXX(f)),(YYY(f)),(ZZZ(f)),Rx,Ry,Rz
470      VIEW_ (Rx),(Ry),(Rz), m, n : mmm(f) = m : nnn(f) = n
480     END FOR f
490     INK  0 : LINES sss,ttt
500     INK ik : LINES mmm,nnn
510     FOR f = 1 TO Nb : sss(f) = mmm(f) : ttt(f) = nnn(f)
520     PAUSE delay
530     IF PEEK(LASTKEY)=Esc : POKE LASTKEY,0 : EXIT loop
540    END FOR thru
550   END FOR axis
560  END FOR nx
570 END REPeat loop
580 INK 0 : LINES sss,ttt
590 INK ik : WINDOW 512,206,0,0 : REMark STOP
600 :
610 REMark REFERENCE    mmm(0),nnn(0)
620 DEFine PROCedure LINES(mmm,nnn)
630  LINE    mmm(1),nnn(1) TO mmm(2),nnn(2) TO mmm(3),nnn(3) TO mmm(4),nnn(4)
640  LINE TO mmm(5),nnn(5) TO mmm(6),nnn(6) TO mmm(7),nnn(7) TO mmm(8),nnn(8)
650  LINE TO mmm(1),nnn(1),   mmm(9),nnn(9) TO mmm(10),nnn(10)
660  LINE mmm(11),nnn(11) TO mmm(12),nnn(12) TO mmm(13),nnn(13)
670 END DEFine LINES
680 :
690 REMark REFERENCE                          Rx, Ry, Rz
700 DEFine PROCedure rotate(axe,agl,xx,yy,zz, Rx, Ry, Rz)
710 LOCal aj,ang,hp,op,Saj,Sop
720  Rx = xx : Ry = yy : Rz = zz : IF Rx=0 : IF Ry=0 : IF Rz=0 : RETurn
730  op = Rz : aj = Rx : IF axe=Xaxis : aj = Ry : END IF : IF axe=Zaxis : op = Ry
740  Sop = (op>0)-(op<0) : Saj = (aj>0)-(aj<0) : hp = ((op^2)+(aj^2))^.5
750  IF Sop=0 AND Saj=0 : GO TO 940
760  IF Sop=0 AND Saj>0 : ang = 0
770  IF Sop>0 AND Saj>0 : ang =      ASIN(ABS(op/hp))
780  IF Sop>0 AND Saj=0 : ang = r90
790  IF Sop>0 AND Saj<0 : ang = r180-ASIN(ABS(op/hp))
800  IF Sop=0 AND Saj<0 : ang = r180
810  IF Sop<0 AND Saj<0 : ang = r180+ASIN(ABS(op/hp))
820  IF Sop<0 AND Saj=0 : ang = r270
830  IF Sop<0 AND Saj>0 : ang = r360-ASIN(ABS(op/hp))
840  ang = ang+agl : IF ang<0 : ang = ang+r360
850  IF ang>=r360 : ang = ang-r360
860  IF ang=0               :Sop= 0:Saj=1:             op=0          :aj=hp
870  IF ang>0:   IF ang<r90 :Sop= 1:Saj=1:             op=hp*SIN(ang):aj=hp*COS(ang)
880  IF ang=r90             :Sop= 1:Saj=0:             op=hp         :aj=0
890  IF ang>r90: IF ang<r180:Sop= 1:Saj=-1:ng=r180-ang:op=hp*SIN(ng) :aj=hp*COS(ng)
900  IF ang=r180            :Sop= 0:Saj=-1:            op=0          :aj=hp
910  IF ang>r180:IF ang<r270:Sop=-1:Saj=-1:ng=ang-r180:op=hp*SIN(ng) :aj=hp*COS(ng)
920  IF ang=r270            :Sop=-1:Saj=0:             op=hp         :aj=0
930  IF ang>r270            :Sop=-1:Saj= 1:ng=r360-ang:op=hp*SIN(ng) :aj=hp*COS(ng)
940  IF axe=Xaxis : Ry = aj*Saj : Rz = op*Sop : Rx = xx
950  IF axe=Yaxis : Rx = aj*Saj : Rz = op*Sop : Ry = yy
960  IF axe=Zaxis : Rx = aj*Saj : Ry = op*Sop : Rz = zz
970 END DEFine rotate
980 :
990 REMark REFERENCE                 m, n
1000 DEFine PROCedure VIEW_(vx,vy,vz, m, n)
1010 LOCal e,h,lh,lx,ly,lz
1020  lx = vx-tx : ly = vy-ty : lh = ((lx^2)+(ly^2))^.5
1030  lz = vz-tz : e = ATAN_((lz),(lh))-b : h = ATAN_((ly),(lx))-c
1040  IF h>PI : h = h-PI*2 : END IF : IF h<-PI : h = h+PI*2
1050  IF e>PI : e = e-PI*2 : END IF : IF e<-PI : e = e+PI*2
1060  m = TAN(h)*1 : n = -1*TAN(e)*((m^2)+1)^.5
1070 END DEFine VIEW_
1080 :
1090 DEFine FuNction ATAN_(oo,aa)
1100 LOCal oa,sa,so
1110  so = (oo>0)-(oo<0) : sa=(aa>0)-(aa<0)
1120  IF (so=0 OR so=1) AND sa=0 : RETurn 0
1130  IF so= 0 AND sa= 1 : RETurn r90
1140  IF so=-1 AND sa= 0 : RETurn r180
1150  IF so= 0 AND sa=-1 : RETurn r270
1160  oa = ATAN(aa/oo)
1170  IF so= 1 AND sa= 1 : RETurn oa
1180  IF so=-1 AND (sa=1 OR sa=-1) : RETurn r180+oa
1190  IF so= 1 AND sa=-1 : RETurn r360+oa
1200 END DEFine ATAN_
1210 :
1220 DATA -7,-6,-6, -9,-6,-6, -11,-4,-6, -11,4,-6, -9, 6,-6, -5, 6,-6, -3,4,-6
1230 DATA -3,-2,-6, -3,-6,-6,  -7,-2,-6,  -1,6,-6, -1,-6,-6,  5,-6,-6
1240 :
1250 REMark REPeat wait : PAUSE 10 : IF KEYROW(1)=1 : EX tumble_obj
1260 REMark To add a QL    ...  Press ENTER
1270 REMark To remove a QL ...  Press Esc
1280 :
1290 REMark Note: If PE is active, use .. EXEP tumble_obj, u
 

Included is a Qliberator job, with the runtimes included. This can also be compiled with Turbo if the REFERENCE directives are uncommented.

The idea is that you can have several of these QL’s animated all at the same time. To do this, do something like ..

REPeat wait : PAUSE 10 : IF KEYROW(1)=1 : EX tumble_obj
or REPeat wait : PAUSE 10 : IF KEYROW(1)=1 : EXEP tumble_obj, u

The PAUSE 10 is there so that it does not hog the processor too much and slow down the performance of the other jobs.
The ‘u’ is there so they all use the same window

To add a QL, press ENTER.
To remove a QL, press Esc.

Steve likes this very much and has asked me to get this on the forum.
I personally find just 2 or sometimes 4 QL’s can make
tumble.zip
Contains BASIC plus obj file
(13.53 KiB) Downloaded 20 times
a very pleasant appearance.
It is easy enough to adjust how many QL’s show by pressing ENTER to add another, and Esc to get rid of one. ENJOY!

EmmBee


User avatar
dilwyn
Mr QL
Posts: 1323
Joined: Wed Dec 01, 2010 10:39 pm
Location: Wales
Contact:

Re: Tumbling QL animation

Postby dilwyn » Wed May 30, 2018 11:08 am

Nice work EmmBee. Lovely animation on QPC2, even with several copies running.


Dilwyn
All things QL: see www.dilwyn.me.uk
stevepoole
Trump Card
Posts: 166
Joined: Mon Nov 24, 2014 2:03 pm

Re: Tumbling QL animation

Postby stevepoole » Wed May 30, 2018 11:58 pm

Hi Folks,
Many thanks to EmmBee for taking an interest in some old code of mine. He stimulated me to revamp the code as follows :
Here is a variant that you should not EXEP ! Just copy and paste it into a word processor and then save the code to some QL MEDIUM ...
Regards,
Steve.

________________________________


100 :
110 REMark TEXT_TUMBLER4. QL Perspective Animation. by S.Poole. v10may2018
120 DATA_AREA 20: REMark for TURBO_SMS_CODE
130 :
140 WINDOW 512,256,0,0: BORDER 0: CLS
150 REMark INITialise variables :
160 Nb=13: DIM t(Nb,5),t2(Nb,5),i$(8)
170 qz=0: REMark slp=0: qz=rs*TAN(RAD(slp)): REMark for future use.
180 Xaxis=1: Yaxis=2: Zaxis=3
190 r90=RAD(90): r180=PI: r270=RAD(270): r360=PI*2: ac=412: dn=256
200 w=.2: sw=-1: scy=2: swx=-1: swy=-1: swz=-1: swt=-1: nng=0: tz=0
210 cx=RND(-.9 TO .9): cy=RND(-.9 TO .9): cz=qz : cz=RND(-1.5 TO 1.5)
220 :
230 WINDOW ac,dn,48,0: BORDER 2,2: PAPER 0: INK 7: CLS
240 RESTORE 1550: REMark get end_points for yellow QL :
250 FOR f=1 TO Nb: READ t(f,Xaxis),t(f,Yaxis),t(f,Zaxis)
260 RESTORE 1550: REMark repeat for parallel white QL :
270 FOR f=1 TO Nb:READ t2(f,Xaxis),t2(f,Yaxis),t2(f,Zaxis):t2(f,Zaxis)=t2(f,Zaxis)+1
280 :
290 REPeat loop
300 RANDOMISE DATE: REMark Reseed regularly :
310 ::
320 FOR axis=2,1,3
330 REMark Spin QL around each of three axes in turn :
340 :::
350 FOR rs=RND(20 TO 110)
360 REMark Vary the radius from view-point to QL position :
370 rdd=1.2: rnd1=2+RND*rdd-RND*rdd : rnd2=2+RND*rdd-RND*rdd
380 ::::
390 FOR thru=0 TO r360 STEP PI/30, r360 TO PI/30 STEP -PI/30
400 REMark rotate through smooth steps :
410 :::::
420 REMark Zoom in and out as QL moves :
430 scy=scy+5E-2*sw: IF scy<.5: sw=sw*-1: END IF : IF scy>5: sw=sw*-1
440 scx=.76*scy*(ac/dn): SCALE scy,-scx/rnd1,-scy/rnd2 : fr=2: nng=nng+RAD(30)
450 :
460 REMark Vary Centre-point in xyz on screen :
470 cx=cx+.2*swx: IF cx<-fr: swx=swx*-1: END IF : IF cx>fr: swx=swx*-1
480 cy=cy+.1*swy: IF cy<-fr: swy=swy*-1: END IF : IF cy>fr: swy=swy*-1
490 cz=cz+.1*swz: IF cz<-fr: swz=swz*-1: END IF : IF cz>fr: swz=swz*-1
500 tz=tz-.1*swt: IF tz<-fr: swt=swt*-1: END IF : IF tz>fr: swt=swt*-1
510 :
520 REMark T rajectory point of QL , and F ocal x,y,z points & directions on screen :
530 tx=(rs*SIN(RAD(nng-180)))+cx: ty=(rs*COS(RAD(nng-180)))+cy
540 Fx=cx-tx: fy=cy-ty: fz=cz-tz: fh=((Fx^2)+(fy^2))^.5
550 c=ATAN_(fy,Fx): b=ATAN_(fz,fh)
560 ::::::
570 FOR f=1 TO Nb
580 REMark f calculates the perspective coordinates :
590 rotate axis,thru,t(f,Xaxis),t(f,Yaxis),t(f,Zaxis)
600 ok=VIEW_(Rx,Ry,Rz): t(f,4)=m: t(f,5)=n
610 rotate axis,thru,t(f,Xaxis),t(f,Yaxis),t2(f,Zaxis)
620 ok=VIEW_(Rx,Ry,Rz): t2(f,4)=m: t2(f,5)=n
630 END FOR f: INK 1: CIRCLE 0,0,3: REMark Draw background.
640 ::::::
650 FOR j=6,0
660 INK j: REMark j draws yellow & white lines in perspective :
670 LINE t(1,4),t(1,5) TO t(2,4),t(2,5) TO t(3,4),t(3,5) TO t(4,4),t(4,5)
680 LINE TO t(5,4),t(5,5) TO t(6,4),t(6,5) TO t(7,4),t(7,5) TO t(8,4),t(8,5)
690 LINE TO t(1,4),t(1,5), t(9,4),t(9,5) TO t(10,4),t(10,5)
700 LINE t(11,4),t(11,5) TO t(12,4),t(12,5) TO t(13,4),t(13,5)
710 IF j=6: INK 7
720 LINE t2(1,4),t2(1,5) TO t2(2,4),t2(2,5) TO t2(3,4),t2(3,5) TO t2(4,4),t2(4,5)
730 LINE TO t2(5,4),t2(5,5) TO t2(6,4),t2(6,5) TO t2(7,4),t2(7,5) TO t2(8,4),t2(8,5)
740 LINE TO t2(1,4),t2(1,5), t2(9,4),t2(9,5) TO t2(10,4),t2(10,5)
750 LINE t2(11,4),t2(11,5) TO t2(12,4),t2(12,5) TO t2(13,4),t2(13,5)
760 IF j<>0: i$=INKEY$(2): IF i$<>'': EXIT loop
770 END FOR j
780 :::::
790 END FOR thru
800 ::::
810 END FOR rs
820 :::
830 END FOR axis
840 ::
850 END REPeat loop
860 PAUSE: STOP
870 :::::::::::::::::::::::::::::::
880 : REMark End of MAIN program
890 :::::::::::::::::::::::::::::::
900 DEFine PROCedure rotate(axe,agl,xx,yy,zz)
910 Rx=xx: Ry=yy: Rz=zz: IF Rx=0 : IF Ry=0: IF Rz=0: RETurn
920 REMark OPposite & AJacent sides :
930 op=Rz: aj=Rx: IF axe=Xaxis: aj=Ry: END IF : IF axe=Zaxis: op=Ry
940 REMark get the signs of the line angles :
950 Sop=(op>0)-(op<0): Saj=(aj>0)-(aj<0): hp=((op^2)+(aj^2))^.5
960 :
970 REMark get the trigonometric angles from the sides :
980 IF Sop=0 AND Saj=0: GO TO 1210
990 IF Sop=0 AND Saj>0: ang=0
1000 IF Sop>0 AND Saj>0: ang=ASIN(ABS(op/hp))
1010 IF Sop>0 AND Saj=0: ang=r90
1020 IF Sop>0 AND Saj<0: ang=r180-ASIN(ABS(op/hp))
1030 IF Sop=0 AND Saj<0: ang=r180
1040 IF Sop<0 AND Saj<0: ang=r180+ASIN(ABS(op/hp))
1050 IF Sop<0 AND Saj=0: ang=r270
1060 IF Sop<0 AND Saj>0: ang=r360-ASIN(ABS(op/hp))
1070 :
1080 REMark rotate the lines by adding agl on axis :
1090 ang=ang+agl: IF ang<0 : ang=ang+r360: END IF
1100 IF ang>=r360:ang=ang-r360: END IF
1110 IF ang=0 : Sop=0: Saj=1: op=0: aj=hp
1120 IF ang>0: IF ang<r90 : Sop=1: Saj=1: op=hp*SIN(ang): aj=hp*COS(ang)
1130 IF ang=r90 : Sop=1: Saj=0: op=hp: aj=0
1140 IF ang>r90 : IF ang<r180 : Sop=1: Saj=-1:ng=r180-ang:op=hp*SIN(ng):aj=hp*COS(ng)
1150 IF ang=r180 : Sop=0: Saj=-1: op=0: aj=hp
1160 IF ang>r180: IF ang<r270 : Sop=-1:Saj=-1:ng=ang-r180:op=hp*SIN(ng):aj=hp*COS(ng)
1170 IF ang=r270 : Sop=-1: Saj=0: op=hp: aj=0
1180 IF ang>r270 : Sop=-1: Saj=1:ng=r360-ang:op=hp*SIN(ng):aj=hp*COS(ng)
1190 :
1200 REMark get transformed absolute coordinates :
1210 IF axe=Xaxis: Ry=aj*Saj: Rz=op*Sop: Rx=xx
1220 IF axe=Yaxis: Rx=aj*Saj: Rz=op*Sop: Ry=yy
1230 IF axe=Zaxis: Rx=aj*Saj: Ry=op*Sop: Rz=zz
1240 END DEFine rotate
1250 :
1260 DEFine FuNction VIEW_(vx,vy,vz)
1270 REMark get perspective coordinates from absolute ones :
1280 REMark V(xyz)iew-point to T(xyz)rajectory point : H ypotenuse :
1290 lx=vx-tx: ly=vy-ty: lz=vz-tz : lh=((lx^2)+(ly^2))^.5
1300 REMark h is azimut : e is dip-slope :
1310 e=ATAN_(lz,lh)-b: h=ATAN_(ly,lx)-c
1320 REMark keep angles within whole circle range :
1330 IF h > PI: h=h-PI*2: END IF : IF h<-PI: h=h+PI*2: END IF
1340 IF e > PI: e=e-PI*2: END IF : IF e<-PI: e=e+PI*2: END IF
1350 REMark m & n are screen coordinates :
1360 m=TAN(h)*1: n=-1*TAN(e)*((m^2)+1)^.5: RETurn 1
1370 END DEFine VIEW
1380 :
1390 DEFine FuNction ATAN_(oo,aa)
1400 REMark adapt QL trigonometry to 3D trigonometry :
1410 REMark first get the line direction signs :
1420 so=(oo>0)-(oo<0): sa=(aa>0)-(aa<0)
1430 IF (so=0 OR so=+1) AND sa=0: RETurn 0
1440 IF so=0 AND sa=+1 : RETurn r90
1450 IF so=-1 AND sa=0 : RETurn r180
1460 IF so=0 AND sa=-1 : RETurn -r90
1470 oa=ATAN(aa/oo)
1480 IF so=+1 AND sa=+1 : RETurn oa
1490 IF so=-1 AND sa=+1 : RETurn oa-r360
1500 IF so=-1 AND sa=-1 : RETurn oa-r360
1510 IF so=+1 AND sa=-1 : RETurn oa
1520 END DEFine ATAN_
1530 :
1540 REMark Get line end-points to construct Q & L :
1550 DATA -7,-6,-9, -9,-6,-9, -11,-4,-9, -11,4,-9, -9,6,-9, -5,6,-9, -3,4,-9
1560 DATA -3,-2,-9, -3,-6,-9, -7,-2,-9, 3,6,-9, 3,-6,-9, 11,-6,-9


Derek_Stewart
QL Wafer Drive
Posts: 1060
Joined: Mon Dec 20, 2010 11:40 am
Location: Runcorn, Cheshire, UK

Re: Tumbling QL animation

Postby Derek_Stewart » Fri Jun 01, 2018 3:20 pm

Hi,

This works great on the Q68.

Which reminds me I found an old QBASIC wire frame cube programme I converted in the 1990s, I will post it here.


Regards,

Derek
stevepoole
Trump Card
Posts: 166
Joined: Mon Nov 24, 2014 2:03 pm

Re: Tumbling QL animation

Postby stevepoole » Thu Jun 07, 2018 6:54 am

Hi,

Working on a animation program, I found this nasty bug :

100 PRINT 5E-2 , 1/20

Interpret it and then compile it under Turbo.

Turbo compiled, it treats 1/20 as an INTEGER divide... Bang!

Regards,
Steve.


martyn_hill
Gold Card
Posts: 401
Joined: Sat Oct 25, 2014 9:53 am

Re: Tumbling QL animation

Postby martyn_hill » Thu Jun 07, 2018 10:16 am

Hi Steve

Yes, I've fallen-foul of TURBO's enthusiasm for 'optimising' expression evaluation in to integers where I wasn't expecting it.

When you say that it goes 'BANG' - did you mean that you get a zero for that "1/20" expression, or something more fruity?

I've taken to coercing TURBO to treat such expressions as FP by inelegant approaches such as appending a zero-equivalent string to the expression, like:

"0" & 1/20

Whether such TURBO integer optimisation should rightly be called a bug is debatable (depends again on what you mean by 'BANG'), but its confusing and sometimes tricky to debug in any case...


User avatar
pjw
Gold Card
Posts: 381
Joined: Fri Jul 11, 2014 8:44 am
Location: Norway

Re: Tumbling QL animation

Postby pjw » Thu Jun 07, 2018 11:43 am

Perhaps the most obvious solution is:

a = 20: print 1/a

or, depending on circumstances, you might be happy with

print 1/20.00001


Per
For every complex problem there is an answer that is clear, simple, and wrong.
- H. L. Mencken
stevepoole
Trump Card
Posts: 166
Joined: Mon Nov 24, 2014 2:03 pm

Re: Tumbling QL animation

Postby stevepoole » Fri Jun 08, 2018 10:22 pm

Hi Martyn & Per,
Thanks for the useful suggestions.
However, I often use DIY programs which manipulate fractions, much as we learnt at school, by classic tabulation. It is more accurate with very big number calculations, even if much slower...
After living in France for 42 years, I still find proper fractions easier to judge mentally than 'base-ten' decimals. (think of 1/3). Base-12 would have been better, but the revolutionaries just did not always have common sense.
Likewise, Turbo's Integer optimisation is somewhat unnecessary, as you can often use IMPLICIT% to get the same effect, where required.
Generally, I do not use Turbo, as I mostly need SMSQ/E for faster prototyping. Turbo is Ok when you get to a beta version. Or to convert Sbasic into C68.
So, treating 1/20 as 0, is to my mind not helpful at all. And a bug-bear to locate the quirks !
Regards,
Steve.



Return to “Software & Programming”

Who is online

Users browsing this forum: No registered users and 4 guests