GLBasic forum

Main forum => Tutorials => Topic started by: loganite on 2008-Jan-27

Title: A smoothly curving towards B
Post by: loganite on 2008-Jan-27
I read the excellent article on smoothly moving from point a to point b and thought some work I had done on vector printing using bezier splines might have a application here. The code follows below, it could be used for examples like :

Missles gaining height and then shooting off towards their target
Aliens outflanking players etc



Code (glbasic) Select
GETSCREENSIZE screenwidth,screenheight
sx=screenwidth*.2;sy=screenheight*.5   //start point
ex=screenwidth*.8;ey=screenheight*.5   //end point
bx=screenwidth*.5;by=screenheight*.5   //curve towards point
animTime=2000   //animation time of 2 seconds

startTime=GETTIMERALL()
WHILE TRUE

MOUSESTATE bx,by,b1,b2

elapsed = GETTIMERALL()-startTime
IF elapsed > animTime   //restart the animation
startTime = GETTIMERALL()
elapsed = 0
ENDIF

T=elapsed/animTime   //how long along the path
x= CalcQuadBezier(sx,bx,ex,T) //calculate position
y= CalcQuadBezier(sy,by,ey,T)

DRAWRECT x,y,10,10,255


PRINT "Time:"+elapsed,0,20
PRINT "< Curves Toward",bx,by
PRINT "^ start point",sx,sy+10
PRINT "^ end point",ex,ey+10
SHOWSCREEN


WEND
END


//point0=start point, point1=bezier point, point2 = end point, 0FUNCTION CalcQuadBezier: Point0,Point1,Point2,t

pt = POW((1-t),2)*Point0 + 2*t*(1-t)*Point1 +t*t*Point2
  RETURN pt

ENDFUNCTION
Title: A smoothly curving towards B
Post by: Quentin on 2008-Jan-27
looks nice, could be very handy for controlling enemy ships or something like that
Title: A smoothly curving towards B
Post by: Kitty Hello on 2008-Jan-27
Genious!
Title: A smoothly curving towards B
Post by: bigsofty on 2008-Jan-28
Excellent stuff! :)
Title: A smoothly curving towards B
Post by: Schranz0r on 2008-Jan-28
Nice stuff, but pls use the "codeblock" for posting code, thx !