I ended up implementing it and simplifying the math a bit.
No dragging:
dropbox.com/scl/fi/3dpr622etyygcxk4cuom7/tetherObjects_noDragging.capx
Older example with dragging:
dropbox.com/scl/fi/sflsjyje1eqwgtxhk9qjb/tetherObjects.capx
As to understanding the formulas, maybe this will help a bit. The w1,w2 formulas are basically the calculated speed along an angle.
speedAlongAngle = velocityX*cos(angle)+velocityY*sin(angle)
It's positive if moving along the angle, and negative if moving the other way. We only want the speed moving away so we clamp it with -min or max so we only have positive speeds.
Then we calculate the distance for the two objects to move back toward each other with (d-radius). That needs to be split between the two objects, and I'm using w1/(w1+w2) and w2/(w1+w2). They add together and give one so it's a complete split. It's mostly so if only one object is moving only it will be moved and vice versa.
The last part is to cancel out any velocity trying to move the objects further apart. We already have the speeds moving apart w1,w2 and we just need to convert the angle, speed to xy components with: x=speed*cos(a), y=speed*sin(a).
The negatives are just to invert the direction. Anyways, maybe some of that explination helps. It's a combination of a lot of simple things.