I'm going to brute force it numerically.
First, let's define the function we're interested in:
fun = KnotData[{3, 1}, "SpaceCurve"] Imagine that this function fun[t] describes the position of a moving point in time. The the magnitude of its velocity as a function of the time t is
Sqrt[#.#] & [fun'[t]] I'm going to make an interpolating function out of this to speed up and simplify the numerical calculations:
v = FunctionInterpolation[Sqrt[#.#] & [fun'[t]], {t, 0, 2 Pi}] The integral (antiderivative) of this function will give us the distance covered as a function of time.
dist = Derivative[-1][v] This is a monotonously increasing function, so it can be inverted:
invdist = InverseFunction[dist] Using the inverse we can generate the times at which the point passes through the equally spaced points. Let's divide the curve into 20 equal-length segments:
times = Table[invdist[x], {x, 0, dist[2 Pi], dist[2 Pi]/20}] Now we can easily plot the equally spaced points:
Show[ ListPointPlot3D[fun /@ times, PlotStyle -> Directive[PointSize[0.02], Red]], ParametricPlot3D[fun[t], {t, 0, 2 Pi}] ] 