import geomerative.*; class bezierstroke { float startsize,endsize,linewidth,mpfract,raisefract,bezierfract; bezierstroke(float _s,float _e,float _l,float _m,float _r,float _b){ startsize=_s; endsize=_e; linewidth=_l; mpfract=_m; raisefract=_r; bezierfract=_b; } void drawstroke(RPoint start,RPoint end) { ellipse(start.x,start.y,startsize,startsize); ellipse(end.x,end.y,endsize,endsize); RPoint mp=new RPoint(start.x+((end.x-start.x)*mpfract),(start.y+((end.y-start.y)*mpfract))-((getHeight()-(start.y+((end.y-start.y)*mpfract)))*raisefract)); RPoint bv=new RPoint((end.x-start.x)*bezierfract,(end.y-start.y)*bezierfract); RPoint b1=new RPoint(mp.x-bv.x,mp.y-bv.y); RPoint b2=new RPoint(mp.x+bv.x,mp.y+bv.y); beginShape(); vertex(start.x,start.y); bezierVertex(start.x,start.y,b1.x,b1.y-(linewidth/2),mp.x,mp.y-(linewidth/2)); bezierVertex(b2.x,b2.y-(linewidth/2),end.x,end.y,end.x,end.y); bezierVertex(end.x,end.y,b2.x,b2.y+(linewidth/2),mp.x,mp.y+(linewidth/2)); bezierVertex(b1.x,b1.y+(linewidth/2),start.x,start.y,start.x,start.y); endShape(); } }