summaryrefslogtreecommitdiffhomepage
path: root/src/rshapes.c
diff options
context:
space:
mode:
authorSAOMDVN <[email protected]>2021-10-03 17:15:56 +0700
committerGitHub <[email protected]>2021-10-03 12:15:56 +0200
commit3fc4a4c9749c61d02b0d9f3bebde26252a582abb (patch)
tree3e1a912fa3aca5df338105dc776b8c22d4013346 /src/rshapes.c
parent03a88678da3fe7bf4ba952a6dfcabfeb380db14a (diff)
downloadraylib-3fc4a4c9749c61d02b0d9f3bebde26252a582abb.tar.gz
raylib-3fc4a4c9749c61d02b0d9f3bebde26252a582abb.zip
Added DrawLineBezierCubic() (#2021)
Co-authored-by: SAOMDVN <[email protected]>
Diffstat (limited to 'src/rshapes.c')
-rw-r--r--src/rshapes.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/rshapes.c b/src/rshapes.c
index 605cdad4..f42d5621 100644
--- a/src/rshapes.c
+++ b/src/rshapes.c
@@ -189,6 +189,32 @@ void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, fl
}
}
+//Draw line using cubic bezier curves with 2 control points
+void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color)
+{
+ 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, 3);
+ float b = 3*powf(1 - t, 2)*t;
+ float c = 3*(1-t)*powf(t, 2);
+ float d = powf(t, 3);
+
+ current.y = a*startPos.y + b*startControlPos.y + c*endControlPos.y + d*endPos.y;
+ current.x = a*startPos.x + b*startControlPos.x + c*endControlPos.x + d*endPos.x;
+
+ DrawLineEx(previous, current, thick, color);
+
+ previous = current;
+ }
+}
+
// Draw lines sequence
void DrawLineStrip(Vector2 *points, int pointCount, Color color)
{