Code archives/Graphics/Bezier Function
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
This function is drawing a line between two points with ability to curve it any way using the reference-points. Updated: I have now included a test-program, bezier-function at the bottom of the source. | |||||
AppTitle "Bezier" Graphics 640,480,16,2 Global x1=100 ; X start Global y1=100 ; Y start Global vx1=100 ; X vector start Global vy1=100 ; Y vector start Global x2=540 ; X end Global y2=380 ; Y end Global vx2=540 ; X vector-end Global vy2=380 ; Y vector-end Global point=0 ; Counter for what position to drag SetBuffer BackBuffer() Repeat Cls drawbezier (x1,y1,vx1,vy1,x2,y2,vx2,vy2) Color 255,0,0 Select point Case 0 Oval x1-2,y1-2,5,5 If MouseDown(2) Then x1=MouseX() y1=MouseY() EndIf Case 1 Oval vx1-2,vy1-2,5,5 If MouseDown(2) Then vx1=MouseX() vy1=MouseY() EndIf Case 2 Oval x2-2,y2-2,5,5 If MouseDown(2) Then x2=MouseX() y2=MouseY() EndIf Case 3 Oval vx2-2,vy2-2,5,5 If MouseDown(2) Then vx2=MouseX() vy2=MouseY() EndIf End Select Color 255,255,255 Text 10,10,"x1= "+x1 Text 10,25,"y1= "+y1 Text 10,40,"vx1="+vx1 Text 10,55,"vy1="+vy1 Text 10,70,"x2= "+x2 Text 10,85,"y2= "+y2 Text 10,100,"vx2="+vx2 Text 10,115,"vy2="+vy2 If MouseDown(1) Then changepoint Flip Until KeyDown(1) WaitKey() End Function changepoint() point=(point+1) Mod 4 While MouseDown(1) Wend End Function ; Bezierline by Wedoe ; x1=startpoint x ; y1=startpoint y ; vx1=referencepoint x1 ; vy1=referencepoint y1 ; x2=endpoint x ; y2=endpoint y ; vx2=referencepoint x2 ; vy2=referencepoint y2 Function drawbezier (x1,y1,vx1,vy1,x2,y2,vx2,vy2) For t#=0 To 1 Step.01 pointx# = x1*(1-t)^3 + 3*vx1*(1-t)^2*t + 3*vx2*(1-t)*t^2 + x2*t^3 pointy# = y1*(1-t)^3 + 3*vy1*(1-t)^2*t + 3*vy2*(1-t)*t^2 + y2*t^3 WritePixel pointx,pointy,$ffffff Next End Function |
Comments
None.
Code Archives Forum