Patent ID: 7493244

Claim:
In an evaluator that evaluates a plurality of rigid bodies defined by values stored in a memory device, a method of calculating simulated motion of the plurality of rigid bodies that would occur given representations of positions of the plurality of rigid bodies in a model space at a first time, data representing behaviours of the plurality of rigid bodies in the model space, and parameters representing simulated forces that would be acting on the rigid bodies, the method comprising: (a) receiving, as input to the evaluator, constraint signals representing constraint parameters defining at least one constraint, wherein the constraint is a condition limiting a motion parameter of at least one of the plurality of rigid bodies; (b) for a given constraint of the at least one constraint, calculating respective values of a plurality of components of a reaction parameter affecting the at least one motion parameter in a vector operation using data defining a previous value of the at least one motion parameter, and using data defining previous values of the components of the reaction parameter, wherein calculating the respective values of the plurality of components of the reaction parameter further comprises: determining a set of constraint reaction forces that ensure that the constraint is satisfied, and if a first rigid body contacts a second rigid body, (i) calculating a minimum constraint force that is normal to a plane of contact between the first body and the second body that prevents the first body from penetrating the second body, and (ii) calculating a set of maximal constraint forces in tangential directions to the plane of contact that maximize the amount of velocity removed through frictional forces based upon the material properties of the first rigid body and the second rigid body; (c) updating the value of the at least one motion parameter using the calculated value of the reaction parameter, data defining the constraint and the previous value of the motion parameter; and (d) repeating steps (b) and (c) for each constraint.