What you need is something called "Boehm's algorithm" (after its originator, Wolfgang Boehm). It has a simple geometric interpretation, and drawing a few pictures should make it clear. There is a pretty good explanation (with pictures) in this document.
The algorithm is based on a process called "knot insertion". You keep inserting knots into the b-spline curve until each knot has multiplicity 3. Then, the b-spline control points of this refined curve give you the Bezier control points of its segments.
So, if you're writing code to do this, one approach is to write a knot insertion function first, and then call it repeatedly.
There is knot insertion code here.
For a quadratic Bézier curve, you need the two endpoints as well as the middle control point (which is not part of the curve itself, while the two endpoints are). Your "algorithm" for splitting the curve into two halves actually only calculates the new endpoint in the middle, but does not provide any hints as to how the middle control points for the two halves should be calculated.
Assuming the overall Bézier curve has control points $P_0$, $P_1$ and $P_2$, the two sub-curves resulting from a split at position $z$ would have control points respectively:
$$
\begin{matrix}
P_{1,0} = P_0
\\
P_{1,1} = (1-z)P_0 + zP_1
\\
P_{1,2} = (1-z)^2P_0 + 2(1-z)zP_1+z^2P_2
\end{matrix}
$$
and
$$
\begin{matrix}
P_{2,0} = (1-z)^2P_0 + 2(1-z)zP_1+z^2P_2
\\
P_{2,1} = (1-z)P_1 + zP_2
\\
P_{2,2} = P_2
\end{matrix}
$$
I suggest that you give a look at http://pomax.github.io/bezierinfo/ for the maths of the solution above.
Edit I forgot to discuss the splitting into multiple chunks, sorry!
Now that you have a way to split a curve at an arbitrary $z$, you can proceed to do the splitting at arbitrary positions $z_1$, $z_2$ and so on, with the following algorithm ($Z$ contains the positions):
- sort the positions in $Z$ so that $\forall i, j:i < j \Rightarrow z_i < z_j$;
- compute the control points for the first sub-spline using $z_0$ (i.e. the lowest element in $Z$) and save these control points (they are part of the solution);
- compute the control points for the remaining sub-spline (i.e. the second part) using, again, $z_0$
- if there are no more elements in $Z$, save these control points (they are the last part of the solution)
- otherwise do the following:
- update all elements in Z using the following formula: $$z_i \leftarrow \frac{z_i - z_0}{1 - z_0}$$
- eliminate the first element of $Z$ (i.e. $z_0$)
- restart from step #2 with the updated $Z$
At each step, this algorithm will provide you the control points for a sub-curve, except for the last iteration that will give you two.
There might be some concerns regarding the propagation of errors at each step. You can easily modify the algorithm to (pre)calculate all the remaining parts in step #3 directly from the input Bézier curve to split (this also includes the last section), and use them at each step for calculating the updated parameters for the intermediate parts. This is left as a simple exercise for the reader 😄
Best Answer
Moving a control point of a b-spline curve will affect a few nearby segments, not just one, but will generally not impact the entire curve.
Typically, people who design high-quality surfaces (like the exterior surfaces of car bodies) prefer Bézier curves and surfaces. They are suspicious of the joints where the segments of a b-spline curve connect together. If the b-spline surfaces are cubics (as they often are), then the suspicion is justified, because the joins will be visible in surface reflections. For these sorts of folks, the local nature of b-spline editing is a disadvantage, because it destroys the "character" of the curve and often leads to local undulations and even inflexions.
On the other hand, if you're doing approximation, then b-splines are probably a better choice, in many situations. The only way to get more degrees of freedom (and a better approximation) with Bézier curves is to increase the degree. A string of low-degree segments (i.e. a spline curve) is often preferable to a single segment with high degree. Mostly because this makes evaluation of curve points and derivatives less expensive.
People will tell you that high-degree polynomials (i.e. Bézier curves) are a bad idea because they tend to "wiggle". This is numerical analysis folklore, but according to Trefethen and Higham (who ought to know), the bad rep is undeserved, and the problems are avoidable. Anyway, there is no chance that high-degree curves defined by Bézier control points will oscillate badly -- the variation-diminishing property of Bézier curves guarantees this. So, no need to be afraid of the wiggling horror stories.
And, in case you're wondering, NURBS (rational curves, as opposed to polynomial ones) are now considered to be a bad idea even by the people who first proposed them.