2 ms·
I was really excited about handling some of the messy constraint situations better than existing tools. I'll split this into two pieces: > It happens pretty of
by colah3 12y ago
I was really excited about handling some of the messy constraint situations better than existing tools. I'll split this into two pieces:
> It happens pretty often that you'll modify a single constraint (flipping it is a common culprit), the solver will get "confused" and flip a bunch of your other constraints around.
For "confused" constraint solvers, I see this as largely being a problem of there being lots of solutions to a well constrained system, because of flips and such. It needs to be easy for the user to specify which one they want.
Our approach was to have fast pulls of the mouse temporarily over ride the constraint solver. So, if you needed to flip the model, you do a really fast pull and it would flip. This works much better with multi touch, where you can just grab a few points with different fingers and force your model into whatever shape you want.
> Constraint conflict resolution also often gets very hairy to almost impossible.
There's some really powerful tools from algebraic geometry I tried to apply to this. In particular, there's these things called Grobner Bases which you can use to test if certain polynomials imply that another is true, false, or if it's independent of them.
From the users perspective, I wanted to use these to do a few things.
(1) Display implied constraints. If you make three corners of a quadrilateral perpendicular, the fourth is forced to be perpendicular. I grayed out perpendicular constraint could alert you to this, and prevent you from adding a conflicting constraint. Obviously, that example is kind of silly, but I think that propagating constraints through the whole model would really help people understand how more complicated models are constrained.
(2) If you try to add a constraint which conflicts with preexisting ones, highlight in red a minimal set it conflicts with.
I never got this part of the project to work though. I did some very small proof of concepts in sage, but couldn't really get things to work. I'm not really sure how realistic it is to make these work for real models.