### Author Topic: Acceleration  (Read 1482 times)

#### Galileo

• Guest
##### Acceleration
« on: January 25, 2018, 05:04:32 PM »
Yabasic is not the fastest interpreter in the world, but under certain conditions, that's no problem.

Code: [Select]
`// Yabasic 2.78 by Galileo 12/2017torad = 0.0174533clear screen w = 850 : h = 700cx = w / 2 : cy = h / 2open window 850, 700backcolor 0, 0, 0FOR j = 1 TO 50    FOR n = 0 TO 360    if not mod(n, j) then         clear window         color 255, 255, 255 : line cx + 150, cy, cx + 450, cy // mesa         color 255, 0, 0 : circle cx, cy, 5 // centro de la rueda         color 0, 255, 0 : circle cx, cy, 100 // rueda         color 0, 0, 255 : c = n * torad : x = COS(c) * 100 : y = SIN(c) * 100 : dx = cx + x : dy = cy + y : circle dx, dy, 5 // anclaje a la rueda         line cx, cy, dx, dy // radio de la rueda circle dx + 300, 325, 5 // anclaje al objeto line dx, dy, dx + 300, 325 // barra de anclaje color 128, 128, 128 : rectangle dx + 300 - 30, 325 - 20, dx + 300 + 30, 325 + 20 // objeto pause .02 end if    NEXT nNEXT j`
« Last Edit: January 25, 2018, 05:06:23 PM by Galileo »

#### Peter

• Guest
##### Re: Acceleration
« Reply #1 on: January 26, 2018, 08:47:20 PM »
Made some small modifications in the positioning, and also in the timing parameters for the GIF to work nicely. Most browsers do not support a GIF frame delay lower than 0.02 seconds.

Code: [Select]
`' Yabasic 2.78 by Galileo 12/2017' Ported to BaCon by PvEINCLUDE canvas-gdOPTION VARTYPE FLOATINGtorad = 0.0174533w = 640 : h = 400cx = w / 2 - 100 : cy = h / 2WINDOW("accel", w, h)DELAY(2) : ' Delay between GIF frames in 1/100 seconds, 2 = 0.02 secondsFOR j = 1 TO 5    FOR n = 0 TO 359 STEP 10        IF NOT(MOD(n, j)) THEN            INK(0, 0, 0, 255)            CLS            INK(255, 255, 255, 255) : LINE(cx, cy, cx + 350, cy) : ' mesa            INK(255, 0, 0, 255) : CIRCLE(cx, cy, 5, 5, 0) : ' centro de la rueda            INK(0, 255, 0, 255) : CIRCLE(cx, cy, 100, 100, 0) : ' rueda            INK(0, 0, 255, 255) : c = n * torad : x = COS(c) * 100 : y = SIN(c) * 100 : dx = cx + x : dy = cy + y : CIRCLE(dx, dy, 5, 5, 0) : ' anclaje a la rueda            LINE(cx, cy, dx, dy) : ' radio de la rueda            CIRCLE(dx + 220, cy-25, 5, 5, 0) : ' anclaje al objeto            LINE(dx, dy, dx + 220, cy-25) : ' barra de anclaje            INK(128, 128, 128, 255) : SQUARE(dx + cx, cy-25, 30, 20, 0) : ' objeto            SYNC        ENDIF    NEXT nNEXT j`
« Last Edit: January 26, 2018, 09:01:23 PM by Peter »

#### B+

• Guest
##### Re: Acceleration
« Reply #2 on: January 27, 2018, 05:39:33 AM »
Code: [Select]
`'Piston_Acceleration.bas for SmallBASIC v 0.12.11 (B+=MGA) 2018-01-26' translated and extremely modified from'// Yabasic 2.78 by Galileo 12/2017'====================================================================''    Instructions - use g for gas and b for brake'''====================================================================w = xmax: h = ymaxcx = w / 2 : cy = h / 2dir = -1 : d = 20while 1  for n = 0 TO 359      cls      if n mod 60 = 0 then k = inkey  'THIS SOLVES PROBLEM OF INKEY SLOW DOWN IN GRAPHICS LOOPS      if k = "g" then        if d - 1 > 0 then d= d - 1      elif k = "b" then         if d+1 < 40 then d = d + 1      end if      k = ""      locate 1, 1 : ? d          x = -COS(rad(n)) * 100 : y = SIN(rad(n)) * 100      dx = cx + x : dy = cy + y      color 9      circle cx, cy, 110, 1, 9 filled      circle cx, cy, 90, 1, 0 filled      star cx, cy, 35, 140, 20, -n      line cx + 150, cy, cx + 450, cy, 15      rect dx + 300 - 30, cy - 40, dx + 300 + 30, cy - 1, 12 filled      color 10      thickline dx, dy, dx + 300, cy - 20, 10      circle dx + 300, cy - 20, 5, 1, 14 filled       circle dx, dy, 5, 1, 14 filled      circle dx + 300, cy - 20, 3, 1, 0       circle dx, dy, 3, 1, 0      showpage      delay d  nextwendsub thickline(x1, y1, x2, y2, thick) 'this draws a little rectangle  local arr, r, dx, dy, perpA1, perpA2  dim arr()  r = thick/2  dx = x2 - x1  dy = y2 - y1  perpA1 = atan2(dy, dx) + pi/2  perpA2 = perpA1 - pi  arr << x1 + r * cos(perpA1) 'corner 1  arr << y1 + r * sin(perpA1)   arr << x2 + r * cos(perpA1) 'corner 2  arr << y2 + r * sin(perpA1)   arr << x2 + r * cos(perpA2) 'corner 3  arr << y2 + r * sin(perpA2)   arr << x1 + r * cos(perpA2) 'corner 4  arr << y1 + r * sin(perpA2)  arr << x1 + r * cos(perpA1) 'back to first corner  arr << y1 + r * sin(perpA1)  drawpoly arr filledendsub star( x, y, rInner, rOuter, nPoints, angleOffset)  ' x, y are same as for circle,  ' rInner is center circle radius  ' rOuter is the outer most point of star  ' nPoints is the number of points,  ' angleOffset = angle offset IN DEGREES, it will be converted to radians in sub  ' this is to allow us to spin the polygon of n sides  pAngle = RAD(360 / nPoints)  :  radAngleOffset = RAD(angleOffset)  x1 = x + rInner * cos(radAngleOffset)  y1 = y + rInner * sin(radAngleOffset)  for i = 0 to nPoints - 1    x2 = x + rOuter * cos(i * pAngle + radAngleOffset + .5 * pAngle)    y2 = y + rOuter * sin(i * pAngle + radAngleOffset + .5 * pAngle)    x3 = x + rInner * cos((i + 1) * pAngle + radAngleOffset)    y3 = y + rInner * sin((i + 1) * pAngle + radAngleOffset)    line x1, y1, x2, y2, 9    line x2, y2, x3, y3, 9    x1 = x3 : y1 = y3  next  paint x, y, 9end sub`