Using curvature and intersection give close result but intersection always need to check the new curvature curve
The script created by @dale work fine but i don’t understand how to convert it to python looks like it use looping
Inflections = c.InflectionPoints() MaxCurvature = c.MaxCurvaturePoints()
MinMaxCurvature.gh (5.1 KB)
Thanks , i see this in your post from other thread and it give the same result as @dale script.
There are different way with regular components but at the end all need intersection,
and it is for v6
Which also available from archive web
give exactly the same result as script @dale
The explanation is not clear to me, can this done by regular components?
Update, after testing visual code with very small curve it fail
I try to convert c# code to python without success; i got null points
conversion c# test2.gh (8.5 KB)
A new try, it give similar result but not the same 100%
points =  def GetInflectionPoints(curve, points): if not curve: return nurb = curve.ToNurbsCurve() if not nurb: retrun on_zero_tolerance = 2.3283064365386962890625e-10 count = nurb.Points.Count * 1000 mul = 1.0 / count if nurb.Domain.Length > 1.0: epsilon = nurb.Domain.Length * on_zero_tolerance else: epsilon = nurb.Domain.Length t0 = 0.0 k0 = Vector3d.Unset start_set = False for i in range(count): t1 = nurb.Domain.ParameterAt(i * mul) k1 = nurb.CurvatureAt(t1) if k1.IsValid: if k1.IsTiny(): continue if start_set: t0 = t1 k0 = k1 start_set = true continue if k0 * k1 < 0.0: pt = Point3d.Unset t = (t0+t1)*0.5 k = nurb.CurvatureAt(t) if k.IsValid: pass if k.IsTiny() and t1-t0<epsilon: pass if k*k0<0.0: t1 = t k1 = k if k*k1<0.0: t0 = t k0 = k pt = nurb.PointAt(t) points.Add(pt) k0 = k1 t0 = t1 if points.Count > 0: return points.pop(0) if GetInflectionPoints(curve, points): a = points