Unfortunately, I don’t have any textbook or material references regarding defining support functions.
I’m not sure what you mean by complex, but I’m assuming shapes like cylinders, ellipsoids, and other curved or partially curved shapes. I follow some general rules:
1a. For example, an Ellipsoid is a just a non-uniformly scaled circle. As such, we can treat an ellipsoid as a circle if we apply the right transforms and inverse transforms (for a 2D example see the getFarthestPoint method ).
1b. For example, a Capsule is just a radially expanded line segment. So we can get the farthest point in a line segment (either end) and then just add the radius along the direction to it (for a 2D example see the getFarthestPoint method ).
2. For example, a Wedge (think slice of pizza in 2D) you technically have a rectanglar box and a partial sphere. So, we can, when the given direction is not within the wedge’s arc just use an adaptation of the rectangle’s support function, and when the direction is within the arc, use the sphere’s support function (for a 2D example see the getFarthestPoint method ).
Hopefully this will give you some ideas.
William
]]>Yeah, I can see how this could be confusing. Since the cross product is not commutative and we technically have (AC X AB) X AB then we need to use the triple product expansion:
(A X B) X C = -A(C · B) + B(C · A) = B(C · A) - A(C · B)
It’s a little hard to tell since both B and C in this case are AB. I’ve added parentheses to the triple products and added some text that shows the triple product expansion I’m using.
William
]]>Which part of the post are you referring to that needs an update?
William
]]>Can you elaborate a little more on what you mean by the ‘time of collision is a little before’? If you mean the collision information (normal and depth) are different, then that’s definitely possible. What method are you using to get the collision information (sampling, EPA, collision margins, etc.)?
William
]]>Checkout these papers:
William
]]>