QB64 Phoenix Edition
QBJS deforming torus - Printable Version

+- QB64 Phoenix Edition (https://qb64phoenix.com/forum)
+-- Forum: QB64 Rising (https://qb64phoenix.com/forum/forumdisplay.php?fid=1)
+--- Forum: QBJS, BAM, and Other BASICs (https://qb64phoenix.com/forum/forumdisplay.php?fid=50)
+--- Thread: QBJS deforming torus (/showthread.php?tid=1623)



QBJS deforming torus - vince - 04-14-2023

inside out torus

run it in QBJS

Code: (Select All)
r = 50
rr = 100
pi = 3.141593

SCREEN _NEWIMAGE(640, 480, 32), , 1, 0

dim t
'SCREEN , , 0, 0
DO
    cls  
    'PCOPY 1, 0
    t = t + .1

    FOR u = 0 TO 7 STEP .05
        FOR v = 0 TO 7 STEP .1

            h = 100 * SIN(t)
            x = (100 + 50 * COS(u)) * COS(v) + h

            rr = 100 * COS(t)
            cc = (pi / 2) * SIN(t)
            ss = SIN(v) * COS(t) + SIN(t)
            y = (rr + r * COS(u + cc)) * ss

            rr = 100 * SIN(t)
            cc = (pi / 2) * COS(t)
            ss = SIN(v) * SIN(t) + COS(t)
            z = (rr + r * COS(u + cc)) * ss

            PSET (x + 0.707 * z + 320, y + 0.707 * z + 240), _RGB(255, 0, z * 10)
        NEXT
    NEXT
    'SLEEP
    _LIMIT 10
    _DISPLAY
LOOP



RE: QBJS deforming torus - vince - 04-14-2023

as well as the 4D clifford torus

run in QBJS

Code: (Select All)
dim shared pi, p, q, d, z0, t, f, sw, sh

sw = 800
sh = 600
d = 700
z0 = 1500
pi = 4*atn(1)

screen _newimage(sw, sh, 32)

sv = 2*pi/30
su = 2*pi/10

'do
for t = 0 to 2*pi step 0.01
    cls
    u = 0
    for v=0 to 2*pi+sv step sv
        x = cos(u)
        y = sin(u)
        z = cos(v)
        w = sin(v)
       
        proj x, y, z, w
        line (p, q)-(p, q)
       
        for u=0 to 2*pi+su step su
            x = cos(u)
            y = sin(u)
            z = cos(v)
            w = sin(v)
       
            proj x, y, z, w
            line -(p, q)
        next
    next
   
    for u=0 to 2*pi+su step su
        x = cos(u)
        y = sin(u)
        z = cos(v)
        w = sin(v)
       
        proj x, y, z, w
        line (p, q)-(p, q), _rgb(255,0,0)
       
        for v=0 to 2*pi+sv step sv
            x = cos(u)
            y = sin(u)
            z = cos(v)
            w = sin(v)
       
            proj x, y, z, w
            line -(p, q), _rgb(255,0,0)
        next
    next
   

    _limit 50
next
'loop

sub proj(x, y, z, w)
    xx = x
    yy = y*cos(t) - w*sin(t)
    zz = z
    ww = y*sin(t) + w*cos(t)

    d2 = 3
    w0 = 3
    xx = xx*d2/(w0 + ww)
    yy = yy*d2/(w0 + ww)
    zz = zz*d2/(w0 + ww)
   
    xxx = xx*cos(t) - zz*sin(t)
    zzz = xx*sin(t) + zz*cos(t)
    xx = xxx
    zz = zzz
   
    a = pi/12
    b = pi/3
    xxx = xx*cos(a) - yy*sin(a)
    yyy = xx*sin(a) + yy*cos(a)
    xx = xxx
    yy = yyy

    yyy = yy*cos(b) - zz*sin(b)
    zzz = yy*sin(b) + zz*cos(b)
    yy = yyy
    zz = zzz
   
    xx = 200*xx
    yy = 200*yy
    zz = 200*zz

    p = sw/2 + 2*xx*d/(yy + z0)
    q = sh/2 - 2*zz*d/(yy + z0)
end sub



RE: QBJS deforming torus - mnrvovrfc - 04-14-2023

ROFLMAO I got that "Clifford" to dance, first by pressing "< Run >" at the bottom and then pressing the triangular "play" button at the top. This was with Firefox on Linux.


RE: QBJS deforming torus - vince - 04-14-2023

yo @dbox

Program #1 runs faster on the latest build at qbjs.org and slower on version 0.5 beta

meanwhile, program #2 runs way faster on 0.5 beta and very slow on the latest build

something is up, perhaps the PSET buffering?  the first program just uses PSETs to sketch out the torus while the second uses LINEs to make a wireframe

EDIT: dbox identified the issue and it will likely get fixed but in the meantime I updated the post with a workaround fix for now


RE: QBJS deforming torus - CharlieJV - 04-14-2023

(04-14-2023, 02:01 AM)vince Wrote: inside out torus

That's a thing of beauty, so I had to try and get it working in BAM.

I had a devil of a time getting the right colouring, and spent much of the last hour trying to figure out the right formula for the blue component.

https://basicanywheremachine.neocities.org/sample_programs/BAM_SamplePrograms?page=deforming_torus


And, because it is also very cool: https://basicanywheremachine.neocities.org/sample_programs/BAM_SamplePrograms?page=4d_clifford_torus