RE: Why not place nodes at the crossing points? :
Yes, this will require a different, slightly more sophisticated drawing interface; but this may then pay off heavily in a simpler, more efficient optimization process.
For each crossing point, the user would see an orthogonal "cross-hair" that can be shifted and rotated as a whole. In addition, there are two parameters (handle-pairs) that control the "velocities" of the two strands through the crossing. The optimization routine would fine-tune these velocities to achieve matching curvature for the two sequentially connected Bezier curves.
And, yes, if a crossing point falls on a line of mirror symmetry, the crosshair would automatically be angled at 45 degrees with respect to this line. And if the knot has n-fold rotational symmetry, n such cross hairs would be placed at the vertices of a regular n-gon. (All this is not such a "nightmare" if it is properly considered from the beginning.)
I don't expect that anything in the current system should be changed; but this approach should definitely be considered in a future version of such a package.
RE: Why not place nodes at the crossing points? : Yes, this will require a different, slightly more sophisticated drawing interface; but this may then pay off heavily in a simpler, more efficient optimization process. For each crossing point, the user would see an orthogonal "cross-hair" that can be shifted and rotated as a whole. In addition, there are two parameters (handle-pairs) that control the "velocities" of the two strands through the crossing. The optimization routine would fine-tune these velocities to achieve matching curvature for the two sequentially connected Bezier curves. And, yes, if a crossing point falls on a line of mirror symmetry, the crosshair would automatically be angled at 45 degrees with respect to this line. And if the knot has n-fold rotational symmetry, n such cross hairs would be placed at the vertices of a regular n-gon. (All this is not such a "nightmare" if it is properly considered from the beginning.) I don't expect that anything in the current system should be changed; but this approach should definitely be considered in a future version of such a package.
https://github.com/RobinHankin/knotR/issues/15#issuecomment-1409174633
Issue #15 refers