finding intersection between a plane and convex polyhedron defined by a plane soup?

Started by
12 comments, last by Filousov 12 years, 3 months ago
Quote:Original post by Kwizatz
Now, how do you go down a dimension in the case that V(i-1) is not contained in the plane?
I think you'll find it described in my coverage of Seidel's algorithm, but basically you just intersect the boundary planes of the polyhedron against the active constraint plane. (See section 5.4.4 for details of how you intersect two planes.) These intersections form lines that are the boundary lines of the 2D hyperplanes in the active constraint plane.

Over and above my coverage of Seidel's algorithm you can probably find additional info on the web. For example, Seidel's original paper is pretty readable (as far as academic papers go):

http://www.cs.berkeley.edu/~jrs/meshpapers/SeidelLP.pdf

This site that talks more about the constraints:

http://groups.csail.mit.edu/graphics/classes/6.838/S98/meetings/m9/LP-SEIDEL.HTM

Most importantly, there's also a publicly available implementation of Seidel's algorithm by Mike Hohmeyer that you may want to try out before you go ahead and implement your own, just to see if the algorithm meets your needs (before you spend a lot of work on it):

http://people.csail.mit.edu/seth/geomlib/lp.tar
Advertisement
Quote:Original post by erwincoumans
If adding convex shapes to ODE interests you, you might want to check out my recent work in this area: adding gjk convex collision detection to ODE.

Although very early stages, here is a win32 binary and the modified ODE/Bullet sources:
http://207.234.235.180/ftp/pub/test/index.php?dir=physics/


Yes, I briefly commented on the post you made to the ODE list (I am Rodrigo Hernandez),
my faith on GJK is shaky right now, I saw your demo, and thought it looked good, hopefully your bullet project would be as good as SOLID 3.5 [smile], I for one really hope so.

Did you implemented continuous collision detection as descrived on Gino's paper? I did based on the FreeSOLID code, but I stated getting false positives, and floating point errors, rendering it useless for me, my math skills are not good enought for figuring out how to make it robust enought (this is why my faith on GJK has diminished).

Anyway, I downloaded the Bullet code, could you point me to the file containing the actual GJK implementation? I'd like to take a look, also are you using single or double presision?

Quote:Original post by erwincoumans
Indeed, if you dont want to use gjk, you can also perform clipping between convex polyhedra. I'm planning to add this to Bullet collision detection and physics library too.


Yes, I want to stay away from GJK, the most stable simulations on ODE are the built-in ones, that's why I am implementing this directly into ODE, using it's own system.

Quote:Original post by erwincoumans
Also I recommend this posting on the convex contact:
http://groups.google.co.uk/group/comp.graphics.algorithms/browse_thread/thread/b6316c1311b726a0/5430568256475ae5


Thanks, I'll take a look [smile].
Quote:Original post by Christer Ericson
I think you'll find it described in my coverage of Seidel's algorithm, but basically you just intersect the boundary planes of the polyhedron against the active constraint plane. (See section 5.4.4 for details of how you intersect two planes.) These intersections form lines that are the boundary lines of the 2D hyperplanes in the active constraint plane.


Thanks, I figured I'd have to do plane-plane intersection, just exactly how to find the extreme points on the resulting lines was what left me a bit confused, Thanks for the links I'll take a look [smile].
It maybe little bit late for answer, but I believe that actually this problem can be solved by this approach efficiently:

1) Having N planes forming the convex polyhedra - each defined by ax + by + cz + d = 0 equation (a, b, c, d being different for each plane)
You do the dual problem transformation: plane to point - this gives you 4D points (a, b, c, d)
2) Then you compute the 4D convex hull from the given points -> this gives you faces
3) Centres of these faces are your convex polyhedra points (in homogenous coordinates, divide by last to get 3D coords). The convex polyhedra edges between points are denoted by edges between 4D convex hull faces.

This way you can translate plane convex polyhedra representation to point/face convex polyhedra representation.

This topic is closed to new replies.

Advertisement