A little gem from the SPL forum section

Post Reply
Henko
Posts: 814
Joined: Tue Apr 09, 2013 12:23 pm
My devices: iPhone,iPad
Windows
Location: Groningen, Netherlands
Flag: Netherlands

A little gem from the SPL forum section

Post by Henko »

A little program, producing an astonishing graphics variety.
Translated from SPL into SB. The SPL program is at the end of the listing.
The picture has been zoomed in somewhat to displat more details

Code: Select all

graphics ! graphics clear 1,1,1
a=1 ! b=3 ! dt=0.2
get screen size w,h
n=0
for i=0 to h/10
  for j=0 to w/10
    x=j ! y=i
    for k=1 to 100
      xn=x-sin(y+a*sin(b*y))*dt
      yn=y+sin(x+a*sin(b*x))*dt
      x=xn ! y=yn
      pal(n%360)
      draw pixel 10*x,10*y color pal.r, pal.g, pal.b
      n+=0.001*w
      next k
    next j
  next i
end

def pal(t)
r=0 ! g=0 ! b=0
if t<120 or t>240 then r=palsub(abs(t-360*floor(t/240)))
if t<240 then g=palsub(abs(t-120))
if t>120 then b=palsub(abs(t-240))
end def
def palsub(e)
f=.5   ' 0<=f<=1 better balance between prim. and sec. colors
if e<60 then c=1 else ! x=(120-e)/60 ! c=x*(1+f-f*x) ! end if
return c
end def

/*
a = 1 ; b = 3 ; dt = 0.1 'change me
w,h = #.scrsize()
n = 0
> i, 0..h/10
  > j, 0..w/10
    x = j ; y = i
    > k, 1..100
      x,y = f(x,y)
      #.drawpoint(x*10,y*10, #.hsv2rgb(n,1,1):3)
      n += 0.001*w
    <
  <
<
f(x,y) <= x-#.sin(y+.a*#.sin(.b*y))*.dt, y+#.sin(x+.a*#.sin(.b*x))*.dt
*/
IMG_1527.PNG
IMG_1527.PNG (5.03 MiB) Viewed 3207 times

User avatar
rbytes
Posts: 1338
Joined: Sun May 31, 2015 12:11 am
My devices: iPhone 11 Pro Max
iPad Pro 11
MacBook
Dell Inspiron laptop
CHUWI Plus 10 convertible Windows/Android tablet
Location: Calgary, Canada
Flag: Canada
Contact:

Re: A little gem from the SPL forum section

Post by rbytes »

Thanks for the translation. I can see where I made errors in mine.

Now that I have your working example, I adapted it to draw in points rather than pixels. The lines are thicker now, but the colors show up more intensely. I adjusted the loop start and end points to fill my iPad screen.

Tapping the screen at any time during the drawing will stop the program.

Code: Select all

set toolbar off
graphics ! graphics clear 1,1,1
sz=1
draw size sz
a=1 ! b=6 ! dt=0.1   /*original a=1 ! b=6 ! dt=0.1*/
get screen size w,h
n=0
for i=0 to h/9
  for j=0 to w/9
    x=j ! y=i
    for k=1 to 100
      xn=x-sin(y+a*sin(b*y))*dt
      yn=y+sin(x+a*sin(b*x))*dt
      x=xn ! y=yn
      pal(n%360)
      draw color pal.r, pal.g, pal.b
      draw line 10*x-sz,10*y-sz to 10*x,10*y
      n+=0.001*w
      next k
    next j
    GET TOUCH 0 AS tx,ty
    if tx<>-1 then end
  next i
DO
  SLOWDOWN
  GET TOUCH 0 AS tx,ty
UNTIL tx<>-1
end

def pal(t)
r=0 ! g=0 ! b=0
if t<120 or t>240 then r=palsub(abs(t-360*floor(t/240)))
if t<240 then g=palsub(abs(t-120))
if t>120 then b=palsub(abs(t-240))
end def
def palsub(e)
f=.5   ' 0<=f<=1 better balance between prim. and sec. colors
if e<60 then c=1 else ! x=(120-e)/60 ! c=x*(1+f-f*x) ! end if
return c
end def
Attachments
58C88F81-84B7-46DE-9163-5CD0DF570156.png
58C88F81-84B7-46DE-9163-5CD0DF570156.png (6.66 MiB) Viewed 3200 times
The only thing that gets me down is gravity...

Henko
Posts: 814
Joined: Tue Apr 09, 2013 12:23 pm
My devices: iPhone,iPad
Windows
Location: Groningen, Netherlands
Flag: Netherlands

Re: A little gem from the SPL forum section

Post by Henko »

This is far better!
Can you give an indication of the speed difference between SB and SPL ?

User avatar
rbytes
Posts: 1338
Joined: Sun May 31, 2015 12:11 am
My devices: iPhone 11 Pro Max
iPad Pro 11
MacBook
Dell Inspiron laptop
CHUWI Plus 10 convertible Windows/Android tablet
Location: Calgary, Canada
Flag: Canada
Contact:

Re: A little gem from the SPL forum section

Post by rbytes »

I will run a speed test on both and post the results later today. ⏱
The only thing that gets me down is gravity...

User avatar
rbytes
Posts: 1338
Joined: Sun May 31, 2015 12:11 am
My devices: iPhone 11 Pro Max
iPad Pro 11
MacBook
Dell Inspiron laptop
CHUWI Plus 10 convertible Windows/Android tablet
Location: Calgary, Canada
Flag: Canada
Contact:

Re: A little gem from the SPL forum section

Post by rbytes »

I just ran the speed tests.

SPL pixel mode (1920 x 1280 pixels)
46 seconds
56 seconds when tap to stop feature added

SPL point mode (960 x 640 Points)
22 seconds
26 seconds when tap to stop feature added

Smart Basic pixel mode (2048 x 1536 pixels)
113 seconds
with tap to stop feature

Smart Basic point mode (1024 x 768 points)
48 seconds
with tap to stop feature

SPL is the clear speed winner, although there are a lot of variables.

- my CHUWI Windows tablet has a slower processor than my iPad. Advantage: iPad/SB

- SPL has a command that Smart Basic has no equivalent for, called #.hsv2rgb. It does the HSV to RGB conversion for every pixel, using compiled code rather than the interpreted code of a function in Smart Basic. Advantage: Windows/SPL

- my CHUWI Windows tablet has a smaller screen to update, containing 2,457,600 pixels. My iPad screen has 3,145,728 pixels, or 1.28 times as many as the Window's tablet's screen. Advantage: Windows/SPL

- detecting a tap at the end of each row of pixels or points (to allow ending the program if partial results are unsatisfactory) slows down both devices. Advantage: none
The only thing that gets me down is gravity...

Henko
Posts: 814
Joined: Tue Apr 09, 2013 12:23 pm
My devices: iPhone,iPad
Windows
Location: Groningen, Netherlands
Flag: Netherlands

Re: A little gem from the SPL forum section

Post by Henko »

Try b=1.7 for a vey different pic.

Henko
Posts: 814
Joined: Tue Apr 09, 2013 12:23 pm
My devices: iPhone,iPad
Windows
Location: Groningen, Netherlands
Flag: Netherlands

Re: A little gem from the SPL forum section

Post by Henko »

Regarding the speed test:
The big difference is caused by the use of the pal() function in SB to set the color for each point.
I ran a test commenting out the use of the pal() function and setting the color for each point with the SB command DRAW COLOR 0,0,0. This is comparable (timewise) with the SPL version.

Time with the pal() command: 64 seconds,
Time with the draw color command: 22 seconds.
That's a factor 3

On your (faster) iPad, the adapted SB code should complete the screen in about 48/3= 16 seconds.
Of course this produces a black and white pic.

Post Reply