i am not sure if that is a bug or my lack of understanding how this curve should work. when i create 3 points that i want to have the catenary go through, the result ends slightly above. i tried method through and apex with the same result. it helps when i go into ridiculous amounts of points but i never quite reach it.
to be fair the discrepancy is really small but i still would like to have an exact result due to modelling purposes. anything i can do or is it a bug?
My understanding is that a catenary can only be approximated by a NURBS curve. That’s why the Rhino function returns a tolerance value. As you’ve found, you need to increase the number of points to get a closer approximation.
Using the default 20 points you are within a tolerance of approx. 0.00661828. With 40 points you would get 0.000314187, which is better than the commonly used 0.001 Rhino modelling tolerance. This catenary is 0.0000493 units above your target apex point. If this bothers you, I imagine that were you to scale it to a drop of exactly 70 units the catenary would not be visibly inaccurate.
Use an odd number of points. Then a knot will be at the lowest point for a symmetric catenary and for this example will be at the mid-point within 0.00000 or better. With an even number of points the lowest point is at the middle of a span of the NURBS curve.
All curves in Rhino are NURBS curves. There are not “control point curves” and “interpolated” curves. The coefficients of a NURBS curve are the control points. The coefficients/control points can be determined in multiple ways including directly specifying control point locations or interpolation.
My guess of how the Catenary command works:
The equation of the exact catenary curve which passes through the three specified points with the specified direction is determined.
A set of points along this exact catenary curve is determined. The number of these points is as specified. Except in special situations none of these points will exactly coincide with the specified interior point.
A NURBS curve is interpolated through the set of calculated points.
when this set of points is determined, it should just respect that one pick point as part of the value through which the calculation has to go through. i have no idea how that works here in Rhino but theoretically i assume that should be possible?
so i guess the command is developed with some lack of control when the pick point or apex is just approximated. it most certainly is not ideal having to revert to some work around or some peculiarity in mind.
i have marked it as Bug for now.. so its not a real solution though your solution works for now.