EDITED: Is there a better rig for splitting/spreading bones?

I'm trying to create a rig that'll spread out when a controller bone is moved down, while keeping the tails of the main bones at a certain height. The current rig I've made has the tails go down a slight arc, rather than maintaining the height I'd like it to be at. (Red being the current motion path of the tail, and blue being the desired motion path)

The bottom bones are both driven by a transform constraint that references the top bone, and have no parent bones. Is there a better, more accurate method to rig this sort of thing, or should I just keep fiddling with the constraint until it actually works as intended? Thanks!

• there are a lot of rigging experts here...but i think the reason why you didn't get an answer here is....(at least for me) because i don't know what you mean with "slight arc" -> a picture or annotation where that arc is would be helpful. and why isn't that accurate? How should it look lke? May 16 at 8:39
• Hi Please use a title that reflects the content of the question. It should be descriptive but succinct, unique and identifying, summarizing the issue so that users can at a glance understand what your post is about. Use the edit link below your post and avoid anything not strictly essential to the post. Remember, your title is the first thing potential visitors will see, and makes your question findable for future users. See "What is the problem with posting an image or link and asking “How do I do this?"" May 16 at 15:08

This is my solution.

Only IK is used. To hold the last joint from rotation, follow rotation is enabled in IK solver:

The bone with IK has IK stretch:

All that left to do is to add a bone with copy rotation, this bone will move without scaling:

I don't know whether this would fit your scheme of things, but the hinge-height (b) and the spread (x) of the beams are just 2 sides of a right-triangle..

.. so, by Pythagoras, you could put a driver on an Empty (E1)'s X, controlled by the hinge Empty (Driver)'s Z, of the form:

x = sqrt(c**2 - b**2).

You would parent the the beams to the Driver Empty, with their origins at the parent, and give them a Locked Track constraint, to point at E1 around a fixed axis (here, Y). You should also limit the location of the Driver Empty, to move in Z only, and also prevent the beam from becoming perfectly vertical or horizontal.