Finding inflection points of 2D BSplineFunction
You can find the inflection points as follows.
Here is the differential geometric part:
(*unit tangent*)
τ = t \[Function] Evaluate[g'[t]/Sqrt[g'[t].g'[t]]];
(*curvature vector*)
κ = t \[Function] Evaluate[τ'[t]/Sqrt[g'[t].g'[t]]];
(*absolute curvature function*)
f = t \[Function] Evaluate[κ[t].RotationMatrix[Pi/2].τ[t]];
And here a two-step method to find the roots of the absolute curvature function:
(*plotting with MeshFunctions -> {(#2&)} to obtain approximations
to the roots of f*)
plot = Plot[f[t], {t, 0, 1}, MeshFunctions -> {(#2 &)},
Mesh -> {{0.}}, MeshStyle -> Red];
gc = Cases[plot, _GraphicsComplex, ∞][[1]];
tvalsapprox = gc[[1]][[Cases[plot, _Point, ∞][[1, 1]], 1]];
(*using the approximate roots as starting values for FindRoot*)
tvals = t /. FindRoot[f[t], {t, #}] & /@ tvalsapprox
{0.448325, 0.892943, 0.147268, 0.935865, 0.0324412, 0.704332, 0.194042}
Thanks Henrik for the curvature code. And that's a neat trick to 'prime' the FindRoot function. Though wouldn't something like this work also?
tvalsapprox =
Flatten[Position[
Table[If[f[t]*f[t + 0.01] < 0, 1, 0], {t, 0, 0.99,
0.01}], 1]]/100.
tvals = t /. FindRoot[f[t], {t, #}] & /@ tvalsapprox