summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorViolet White <[email protected]>2020-12-26 06:04:38 -0600
committerGitHub <[email protected]>2020-12-26 13:04:38 +0100
commitde13fca3b1da643c74be37d16df5e30cd7198457 (patch)
treeb77046b5b5e6b916a8b885ef67a880b863a87e99
parentb59ca95a160db14a3c7b54d139723b03a1147cf9 (diff)
downloadraylib-de13fca3b1da643c74be37d16df5e30cd7198457.tar.gz
raylib-de13fca3b1da643c74be37d16df5e30cd7198457.zip
Add Quadratic Bezier drawing (#1468)
* Add quadratic bezier to shapes.c * Add DrawLineBezierQuad to header
-rw-r--r--src/raylib.h1
-rw-r--r--src/shapes.c24
2 files changed, 24 insertions, 1 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 11fb337b..35afce38 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1090,6 +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 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 56de3a7a..829d54cb 100644
--- a/src/shapes.c
+++ b/src/shapes.c
@@ -179,7 +179,29 @@ 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)
+{
+ Vector2 previous = startPos;
+ Vector2 current;
+ float t=0;
+ const float step = 1.0f/BEZIER_LINE_DIVISIONS;
+ 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;
+
+ DrawLineEx(previous,current,thick,color);
+
+ previous=current;
+
+ }
+}
// Draw lines sequence
void DrawLineStrip(Vector2 *points, int pointsCount, Color color)
{