浏览代码

Add inverse point functions

pull/4810/head
Amy Wilder 2 个月前
父节点
当前提交
ddf3bc9d2a
共有 2 个文件被更改,包括 28 次插入0 次删除
  1. +4
    -0
      src/raylib.h
  2. +24
    -0
      src/rshapes.c

+ 4
- 0
src/raylib.h 查看文件

@ -1310,6 +1310,10 @@ RLAPI Vector2 GetSplinePointCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vecto
RLAPI Vector2 GetSplinePointBezierQuad(Vector2 p1, Vector2 c2, Vector2 p3, float t); // Get (evaluate) spline point: Quadratic Bezier
RLAPI Vector2 GetSplinePointBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t); // Get (evaluate) spline point: Cubic Bezier
// Spline inverse point functions, for evenly-spaced points on the curve
RLAPI void GetSplineControlBezierQuad(Vector2 startPos, Vector2 midPos, Vector2 endPos, Vector2 *controlPos); // Get (evaluate) spline control point: Quadratic Bezier
RLAPI void GetSplineControlBezierCubic(Vector2 startPos, Vector2 oneThirdsPos, Vector2 twoThirdsPos, Vector2 endPos, Vector2 *startControlPos, Vector2 *endControlPos); // Get (evaluate) spline control points: Cubic Bezier
// Spline segment slope evaluation functions, for a given t [0.0f .. 1.0f]
RLAPI Vector2 GetSplineVelocityLinear(Vector2 startPos, Vector2 endPos); // Get (evaluate) spline velocity: Linear
RLAPI Vector2 GetSplineVelocityBezierQuad(Vector2 startPos, Vector2 controlPos, Vector2 endPos, float t); // Get (evaluate) spline velocity: Quadratic Bezier

+ 24
- 0
src/rshapes.c 查看文件

@ -2358,6 +2358,14 @@ Vector2 GetSplinePointBezierQuad(Vector2 startPos, Vector2 controlPos, Vector2 e
return point;
}
// Get spline control point given evenly-spaced points on that curve, Quadratic Bezier
// NOTE: Assumes startPos has 0 entry velocity and endPos has 0 exit velocity
void GetSplineControlBezierQuad(Vector2 startPos, Vector2 midPos, Vector2 endPos, Vector2 *controlPos)
{
controlPos->y = 2.0f*midPos.y - 0.5f*(startPos.y + endPos.y);
controlPos->x = 2.0f*midPos.x - 0.5f*(startPos.x + endPos.x);
}
// Get spline point for a given t [0.0f .. 1.0f], Cubic Bezier
Vector2 GetSplinePointBezierCubic(Vector2 startPos, Vector2 startControlPos, Vector2 endControlPos, Vector2 endPos, float t)
{
@ -2374,6 +2382,22 @@ Vector2 GetSplinePointBezierCubic(Vector2 startPos, Vector2 startControlPos, Vec
return point;
}
// Get spline control points given evenly-spaced points on that curve, Cubic Bezier
// NOTE: Assumes startPos has 0 entry velocity and endPos has 0 exit velocity
void GetSplineControlBezierCubic(Vector2 startPos, Vector2 oneThirdsPos, Vector2 twoThirdsPos, Vector2 endPos, Vector2 *startControlPos, Vector2 *endControlPos)
{
const float a = -5.0f/6.0f;
const float b = 3.0f;
const float c = -3.0f/2.0f;
const float d = 1.0f/3.0f;
startControlPos->x = a*startPos.x + b*oneThirdsPos.x + c*twoThirdsPos.x + d*endPos.x;
startControlPos->y = a*startPos.y + b*oneThirdsPos.y + c*twoThirdsPos.y + d*endPos.y;
endControlPos->x = a*endPos.x + b*twoThirdsPos.x + c*oneThirdsPos.x + d*startPos.x;
endControlPos->y = a*endPos.y + b*twoThirdsPos.y + c*oneThirdsPos.y + d*startPos.y;
}
// Get spline direction and speed, Linear Bezier
//
// Normalize to get the "forward" direction of the curve

正在加载...
取消
保存