diff --git a/src/raylib.h b/src/raylib.h index 35afce38c..031640b12 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -1090,7 +1090,7 @@ RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Colo RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (Vector version) RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line defining thickness RLAPI void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line using cubic-bezier curves in-out -RLAPI void DrawLineBezierQuad(Vector2 startPos,Vector2 controlPos,Vector2 endPos, float thick, Color color);//Draw line using quadratic bezier curves with a control point +RLAPI void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); //Draw line using quadratic bezier curves with a control point RLAPI void DrawLineStrip(Vector2 *points, int pointsCount, Color color); // Draw lines sequence RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle RLAPI void DrawCircleSector(Vector2 center, float radius, int startAngle, int endAngle, int segments, Color color); // Draw a piece of a circle diff --git a/src/shapes.c b/src/shapes.c index 829d54cb1..3cb30eb02 100644 --- a/src/shapes.c +++ b/src/shapes.c @@ -179,29 +179,33 @@ void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color) previous = current; } } + // Draw line using quadratic bezier curves with a control point -void DrawLineBezierQuad(Vector2 startPos, Vector2 controlPos, Vector2 endPos,float thick,Color color) +void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color) { - Vector2 previous = startPos; - Vector2 current; - float t=0; const float step = 1.0f/BEZIER_LINE_DIVISIONS; + + Vector2 previous = startPos; + Vector2 current = { 0 }; + float t = 0.0f; + for (int i = 0; i <= BEZIER_LINE_DIVISIONS; i++) { - t=step*i; - float a = powf(1-t,2); - float b = 2*(1-t)*t; - float c = powf(t,2); - //The easing functions aren't suitable here because they don't take a control point - current.y=a*startPos.y+b*controlPos.y+c*endPos.y; - current.x=a*startPos.x+b*controlPos.x+c*endPos.x; + t = step*i; + float a = powf(1 - t, 2); + float b = 2*(1 - t)*t; + float c = powf(t, 2); - DrawLineEx(previous,current,thick,color); + // NOTE: The easing functions aren't suitable here because they don't take a control point + current.y = a*startPos.y + b*controlPos.y + c*endPos.y; + current.x = a*startPos.x + b*controlPos.x + c*endPos.x; - previous=current; + DrawLineEx(previous,current,thick,color); + previous = current; } } + // Draw lines sequence void DrawLineStrip(Vector2 *points, int pointsCount, Color color) {