Dear All,
Is there any specific paper (or specific computational geometry method name) about the method implemented in refine method() in btSoftBody.cpp? Any help is welcome...
Regards,
Ugras
Topology Change_Refine Method
-
tetraCutter
- Posts: 5
- Joined: Fri Mar 19, 2010 5:29 pm
Re: Topology Change_Refine Method
Did you find out something about that refine()-function?
-
Ugras
- Posts: 34
- Joined: Wed Dec 30, 2009 8:30 pm
Re: Topology Change_Refine Method
Hi Tetracutter,
I debugged that part of the engine related to refine() and other called functions. With the experimentation and the help of the debugger I got the idea. The function uses Explicit Euler Integration (makes linearization by expansion to 1st order Taylor Series) to estimate the position, velocity, mass of the new node. It considers the following optimization problem:
min(t) with respect to abs(v) < accuracy
Then according to the computed t value; node position, velocity and mass are calculated. Special mass cases are handled also. t value is the number of steps taken when moving from node a to b. Impact point is the point that you clicked with mouse. The radius of inifinetesmall sphere around the impact point is defined as 1 unit as I remember. The new node position is desired to be in the "accuracy" neighborhood (or in other words : epsilon neighborhood where epsilon = accuracy) of the surface of the infinitesmall sphere.
The link and face refinements are also important part of the code as I see. I can explain them if you want, from what I understand. But they are simply 1D and 2D refinements as I see and they are similiar to each other. After defining the new node position and its parameters you use it to divide the related edge and reinterpret it linearly as two lines. Ie: let two ends of the line as n0 and n1; and let the new node as n*. To go from n0 to n1, first go to n* from n0 and then from n* to n1.
Similar for three edges of the face.
But are there any comments to the explanations above? Is there any inconsistencies with the above explanation?
Regards,
Ugras
I debugged that part of the engine related to refine() and other called functions. With the experimentation and the help of the debugger I got the idea. The function uses Explicit Euler Integration (makes linearization by expansion to 1st order Taylor Series) to estimate the position, velocity, mass of the new node. It considers the following optimization problem:
min(t) with respect to abs(v) < accuracy
Then according to the computed t value; node position, velocity and mass are calculated. Special mass cases are handled also. t value is the number of steps taken when moving from node a to b. Impact point is the point that you clicked with mouse. The radius of inifinetesmall sphere around the impact point is defined as 1 unit as I remember. The new node position is desired to be in the "accuracy" neighborhood (or in other words : epsilon neighborhood where epsilon = accuracy) of the surface of the infinitesmall sphere.
The link and face refinements are also important part of the code as I see. I can explain them if you want, from what I understand. But they are simply 1D and 2D refinements as I see and they are similiar to each other. After defining the new node position and its parameters you use it to divide the related edge and reinterpret it linearly as two lines. Ie: let two ends of the line as n0 and n1; and let the new node as n*. To go from n0 to n1, first go to n* from n0 and then from n* to n1.
Similar for three edges of the face.
But are there any comments to the explanations above? Is there any inconsistencies with the above explanation?
Regards,
Ugras