QBJS deforming torus
#1
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
Reply
#2
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
Reply
#3
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.
Reply
#4
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
Reply
#5
(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.o...ming_torus


And, because it is also very cool: https://basicanywheremachine.neocities.o...ford_torus
Reply




Users browsing this thread: 3 Guest(s)