Constrain an object to where 2 other objects intersect?

Hello!

In the attached image, you will see 2 animated cuboids thats rotate at the far points from each other, and the nearer parts intersect each other. But how can I constrain a 3rd object to the point they intersect (indicated by the green dot)?

Bear in mind that the intersection point continuously slides up and down the length of both cuboids.


It depends on how you accomplished what you have.

I made up similar rig that have three posts, that works. In my case I used Empty at the pivot point. First post always point to the Empty with Track To constraint. Second post uses Track To constraint, Copy Rotation (with Invert on Z axis), and Copy Location (with Invert on X axis). Last post have same setting as second, with Influence set to .5 for Copy Rotation and Copy Location.

With this setup, the Empty pivot point is fixed in space. But it looks like your setup shows pivot moving up and down?

Yes the problem here is that the pivot point slides up and down the lengths of BOTH cuboids dynamically. I have actually found a way to do it, but not perfectly; my solution uses 2 Stretch-to bone modifiers either side of, and stretching to the green dot (pivot). The dot itself (a cylindrical pivot in my full model) in turn has 2 x ‘Copy Location’ constraints - one for each Stretch-to’ed bone, and simultaneously has 2 competing Shrink Wrap constraint to stick it to the surface of both cuboids.

As I said, it is not perfect; the pivot jiggles about a bit as the rig moves but might look OK in fast movement from a distance. For this reason, I will leave this thread Unsolved for a while longer to see if anyone comes up with a better method.

Thanks!

It looks like yet another occasion for my favourite mechanical animation trick: IK with stretching :).
You imply, but don’t state explicitly, that the two cuboids rotate symmetrically (equal and opposite angles). My suggested solution assumes that is the case, but can be adapted if it is not true.

Start with an armature of three horizontal bones: the first, ‘Left’ goes from the lefthand pivot point to the point halfway between the two pivots; the second, ‘Intersection’ goes from there to the righthand pivot, and the third, ‘Right’ goes as far as you wish in the same direction. ‘Intersection’ is parented to ‘Left’, but ‘Right’ is not parented to ‘Intersection’.

‘Left’ and ‘Intersection’ both have a ‘Copy Rotation’ bone constraint, targeting ‘Right’, inverting the rotation for ‘Left’ but not for ‘Intersection’. ‘Intersection’ also has an IK constraint, also targeting ‘Right’. In the Bone->Inverse Kinematics panel for both ‘Left’ and ‘Intersection’ lock all rotations, but turn Stretch up to maximum.

Rotating ‘Right’ now makes the junction point between ‘Left’ and ‘Intersection’ go up and down as required.


Add the three objects to be animated. Give ‘Child of’ constraints to the left and right cuboids targeting the ‘Left’ and ‘Right’ bones; uncheck all the ‘Scale’ boxes, and hit ‘Set Inverse’. Give the object at the intersection a ‘Copy Location’ constraint targeting the ‘Intersection’ bone.

Rotating ‘Right’ now makes everything move as described.


Alternatively, instead of making the righthand cuboid follow the ‘Right’ bone, you could make the ‘Right’
bone follow the cuboid, and drive everything by rotating that.

Best wishes,
Matthew

Attachments

scissor.blend (532 KB)

Thankyou Matthew, that is exactly what I wanted! My way worked but little bit jerkily and with far too many contraints. Yours is much more elegant