Probably the simplest way is to compute the ArcLength
of the line. Don't forget to add the first point to the end of the line to make it closed:
data = Table[{Cos[t], Sin[t], Sin[t]*Cos[t]}, {t, 0, 2 π, .1}];
pts = Append[data, data[[1]]];
len1 = ArcLength@Line[pts]
7.634227745692222`
One can also generate an interpolating spline curve with centripetal parametrization using ResourceFunction["LeeInterpolatingNodes"]
, and then compute its length:
int = Interpolation[Transpose[{ResourceFunction["LeeInterpolatingNodes"][pts], pts}],
Method -> "Spline"];
len2 = NIntegrate[Norm[int'[t]], {t, 0, 1}, PrecisionGoal -> 10]
7.640389067320646`
This value is expectedly larger because the line segments are curved rather than straight. Compare with the theoretical arc length of the curve:
l = ArcLength[{Cos[t], Sin[t], Sin[t]*Cos[t]}, {t, 0, 2 π}] // N
7.640395578055424`
By increasing the InterpolationOrder
, we can achieve even better approximation:
int = Interpolation[Transpose[{ResourceFunction["LeeInterpolatingNodes"][pts], pts}],
Method -> "Spline", InterpolationOrder -> 4];
len3 = NIntegrate[Norm[int'[t]], {t, 0, 1}, PrecisionGoal -> 10]
7.640398305829719`
However, in this case uniform parametrization gives even better result (it is equivalent to the method used by Daniel Huber):
int = Interpolation[Transpose[{ResourceFunction["LeeInterpolatingNodes"][pts, 0], pts}],
Method -> "Spline", InterpolationOrder -> 3];
len4 = NIntegrate[Norm[int'[t]], {t, 0, 1}, PrecisionGoal -> 10]
7.640396695308711`
Compare with the theoretical value:
{len1, len2, len3, len4} - l

P.S. Strongly related answers: (1), (2).