Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
bezier and cubic curves
#1
finally i coded some snipets - two of them are about drawing bezier and cubic curves - btw, if someone can help them being faster, or part of the library, be welcome! Smile

beziercurve.bas
Code:
dim x0,y0,x1,y1,x2,y2,x3,y3 as float
dim stpv,xi,xo,yi,yo,ir,i as float
dim xr1,yr1,xr2,yr2 as float
dim xsn,ycs as float
dim xa,ya,xb,yb,xc,yc as float
dim tw,t as float
x0=20:y0=30:x1=50:y1=80:x2=150:y2=40:x3=110:y3=10
xa=(x3)-(3*x2)+(3*x1)-(x0)
ya=(y3)-(3*y2)+(3*y1)-(y0)

xb=(3*x2)-(6*x1)+(3*x0)
yb=(3*y2)-(6*y1)+(3*y0)

xc=(3*x1)-(3*x0)
yc=(3*y1)-(3*y0)

stpv=32
for tw=0 to stpv

  t=tw/stpv

  x=(((((xa*t)+xb)*t)+xc)*t)+x0
  y=(((((ya*t)+yb)*t)+yc)*t)+y0

  if tw=0 then:xo=x:yo=y:end if

  plot xo,yo:draw x-xo,y-yo   :'- line (xo,yo,x,y):
  xo=x:yo=y

next

pause 0

cubiccurve.bas
Code:
dim x0,y0,x1,y1,x2,y2,x3,y3 as float
dim stpv,xi,xo,yi,yo,ir,i as float
dim xr1,yr1,xr2,yr2 as float
dim xsn,ycs as float
x0=20:y0=30:x1=50:y1=80:x2=150:y2=40
xr1=x1-x0:yr1=y2-y1

x3=x0+x2-x1:y3=y0+y2-y1

xr2=x2-x1:yr2=y3-y2
stpv=32

for i=0 to stpv

  ir=i*(1.570796/stpv)

  xsn=(xr1*sin(ir))-(xr2*cos(ir))

  ycs=(yr1*(cos(ir)*-1))-(yr2*sin(ir))

  xi=x3+xsn:yi=y3+ycs

  if i=0 then:xo=xi:yo=yi:end if

  if i<>0 then:
    plot xo,yo:draw xi-xo,yi-yo  :'- line (xo,yo,xi,yi)
    end if
  xo=xi
  yo=yi

  next i

pause 0

circlefill.bas
Code:
dim x,y,r,xl as ubyte
dim yd as float
x=50:y=60:r=40
for yd=0 to r
  xl=int((sin(acs(yd/r)))*r)
  plot x-xl,y+yd:draw xl*2,0
  if yd<>0 then:plot x-xl,y-yd:draw xl*2,0:end if
  next yd
pause 0

boxfill.bas
Code:
dim x1,y1,x2,y2 as integer
x1=20:y1=30:x2=50:y2=80
for y=y1 to y2
  plot x1,y:draw x2-x1,0
  next y
pause 0

box.bas
Code:
dim x1,y1,x2,y2 as integer
x1=20:y1=30:x2=50:y2=80
plot x1,y1
draw x2-x1,0
draw 0,y2-y1
draw x1-x2,0
draw 0,y1-y2
pause 0

line.bas
Code:
dim x1,y1,x2,y2 as integer
x1=20:y1=30:x2=50:y2=80
plot x1,y1
draw x2-x1,y2-y1
pause 0
Reply
#2
They could be sped up by using faster trig functions, somewhat - though they would lose accuracy:
https://zxbasic.readthedocs.io/en/docs/l.../fsin.bas/

Boriel has also optimized draw and circle to be much faster than Sinclair Basic already.

Floats are also the slowest data type - you should avoid for anything you want speed for.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)