# Mathematical definition of Blender's F-Curves

I'm designing software for generating animation curves. I'd like the curves to be based on those found in Blender 3D, which they call "F-Curves." According to the page on the Blender Wiki, they are similar to Bezier curves but they are a function of time rather than a parametric function. This is necessary because the property that the curve represents cannot have more than one value at any given time.

So far, I haven't been able to find a mathematical definition for an F-Curve. Does anyone here know they are defined? The screenshots on the wiki page might give some clues. Are they just Bezier curves with a restricted set of inputs? Or are they something fundamentally different?

Edit: Here's a screenshot of the curve. It's important that the control points have the ability to influence the curve more or less than an adjacent control point. This is possible with Bezier curves, but once the influence of one control point is strong enough, you can get loops in the curve or the curve will turn back on itself, both of which are undesirable for an F-Curve. • Wikipedia says An FCurve (also written f-curve) is a function curve or the graph of a function. An example of a FCurve is a spline. Apart from being a function of time, I think that you may have to read the implementation in order to understand Blender's definition of an F-Curve (the interpolation algorithms, etc). Jun 28, 2014 at 6:33

The idea is that you can construct a cubic curve by interpolating given values and slopes at its two end-points. Specifically, suppose you are given two values $p_0$ and $p_1$, and two end-slopes $q_0$ and $q_1$. Define a function $f(t)$ by $$f(t)= (2t^3-3t^2+1)p_0 + (3t^2 - 2t^3)p_1 + (t^3-2t^2+t)q_0 + (t^3-t^2)q_1$$ Then it's easy to verify that $f(0)=p_0$, $f(1)=p_1$, $f'(0)=q_0$, and $f'(1)=q_1$.
• With real-valued functions, where $f(t)$ is just a number, what you say is true; you only have four control variables -- the end values and the end slopes. Another approach would be to use vector-valued functions. So , you interpret the end points and end derivatives as 2D vector quantities, which means that $f(t)$ will also be a 2D position. Then the lengths of the derivative vectors $q_0$ and $q_1$ give you the "strength" control you asked about. But then there is a problem if you want to get a $y$ value from a given $x$ value. It can be done, but it involves solving a cubic equation. Jun 30, 2014 at 0:21