Building a constraint programming solver in Julia
opensourc.es
opensourc.es
https://cad.onshape.com/help/Content/constraints.htm
Onshape is free to demo, so give it a whirl?
Basically you write a renderer for some data and have a constraint solver (just backprop I think for g9) to solve for the best data that will render something that fits the user input.
Then the solver uses some magic to parse Test so that it can search S more efficiently than just loop over it. So if the solver is small enough, it seems like 3d animation could be done but the might need to be somewhat aware of that use.
See:
I wrote a relational interval constraint solver for automated CAD design. It used constraints to eliminate infeasible regions of a design space before a nonlinear solver would generate the actual geometry. It was pretty fun puzzling out how to build this thing!
I used it to operate on a design space as a single entity, or sliced into finite chunks, and to cut out sub-spaces of infeasible designs by constraint propagation.
I think interval valued relational constraint programming could be extended (and probably already has) for mechanical modeling, and 3D animation, yes. But the utility of a purely discrete constraint solver, such as the one posted here, is maybe less for these types of cases. Interval systems methods (for solving nonlinear equations) have a long history in optimization and motion planning. No reason a constraint solver couldn't be applied there. Similarly, if you have a specific use case, I could try and offer more about constraint solving for it.
I should also note that constraint solving with real or and especially interval data goes back to at least the 80s. I just made use of some low hanging fruit!
(ConstraintSolver) pkg> develop .
[ Info: Assigning UUID 761e04fa-38db-5968-92db-bac8a6ce9725 to user_name
Resolving package versions...
ERROR: IOError: stat: unknown error (UNKNOWN)On linux, it works.
grid =
Int8[0 0 0 5 4 6 0 0 9
0 2 0 0 0 0 0 0 7
0 0 3 9 0 0 0 0 4
9 0 5 0 0 0 0 7 0
7 0 0 0 0 0 0 2 0
0 0 0 0 9 3 0 0 0
0 5 6 0 0 8 0 0 0
0 1 0 0 3 9 0 0 0
0 0 0 0 0 0 8 0 6] Int8[0 0 0 5 4 6 0 0 9;
0 2 0 0 0 0 0 0 7;
0 0 3 9 0 0 0 0 4;
9 0 5 0 0 0 0 7 0;
7 0 0 0 0 0 0 2 0;
0 0 0 0 9 3 0 0 0;
0 5 6 0 0 8 0 0 0;
0 1 0 0 3 9 0 0 0;
0 0 0 0 0 0 8 0 6]