Bezier
Posted: Wed Mar 11, 2015 10:52 pm
Code: Select all
rem bezier
rem iPhone 6 Plus / 8.3 b2
rem enjoy...
gosub initialize
main:
do
de=de-1
if de=0 then
de=cd
dm=(dm+1)%mdm
end if
ang=ang+1
if ang>360 then ang=ang-360
graphics clear 0,0,0
for a=1 to mp
ax=asi(ang+a*mlt)*sw/2
ay=aco(ang+a*mlt)*sh/2
avx=asi(ang*10)*80
avy=aco(ang*10)*80
aaa=a+1
if a=mp then aaa=1
dx=asi(ang+aaa*mlt)*sw/2
dy=aco(ang+aaa*mlt)*sh/2
dvx=aco(ang*10)*80
dvy=asi(ang*10)*80
gosub drawbezier '(ax,ay,dx,dy,avx,avy,dvx,dvy)
next a
until 1=2
return
drawbezier: '(ax,ay,dx,dy,avx,avy,dvx,dvy)
'new curve
bx=ax+avx
by=ay+avy
cx=dx+dvx
cy=dy+dvy
for t=0 to 1 step 0.05
aa=t
bb=1-t
x=ax*bb^3+3*bx*bb^2*aa+(3*cx)*bb*aa^2+dx*aa^3
y=ay*bb^3+3*by*bb^2*aa+(3*cy)*bb*aa^2+dy*aa^3
fill color x,y,-x-y
draw color x,y,-x-y
si=asi(ang)*20
if dm=0 then fill rect x,y to x+1,y+1
if dm=1 then draw line to x,y
if dm=2 then draw line 0,0 to x,y
if dm=3 then draw line x,y to -x,-y
if dm=4 then fill rect x-si,y-si to x+si,y+si
if dm=5 then draw line x,y to y,x
if dm=6 then draw line x,y to x*4,y*4
if dm=6 then draw line 0,0 to y,x
if dm=7 then draw line x,0 to 0,y
if dm=8 then draw line x,y to asi(ang*10)*100,aco(ang*10)*100
next t
return
initialize:
graphics
sw=screen_width()
sh=screen_height()
pi=3.1415
mdm=9
cd=200
de=cd
dim aco(3601),asi(3601)
f=3.14/180
for a=0 to 3600
aco(a)=cos(a*f)
asi(a)=sin(a*f)
next a
mp=4
mlt=360/mp
return