Collision callback returns extra contacts (pymunk)

Discuss any Chipmunk bugs here.
Post Reply
chmille3
Posts: 3
Joined: Thu Apr 30, 2009 3:34 pm
Contact:

Collision callback returns extra contacts (pymunk)

Post by chmille3 »

Hello all, I want to have geometric shapes stick to each other if two or more points of contact occur between any two shapes. However, when a corner of one of the shapes hits the side of another, more than one contact point is registered and the extra contact point is in a different spot.

Examples are in the attached files where a triangle corner is colliding with either a square or another triangle. The small red dots are the collision points registered in the callback and the red dot on the triangle in the 2nd file is the position of my mouse. This only seems to happen with a triangle is hitting a square or another triangle, and even then only occurs about 50 percent of the time.

I perform a point query using the two points returned and both points say they are hitting the triangle when clearly only one is.
I tried this with pymunk version 0.8.4 and 1.0.0 and have the same problem. It seems to be a bug in pymunk(chipmunk) but wasn't sure. Any help/feedback is appreciated, thanks.
User avatar
slembcke
Site Admin
Posts: 4166
Joined: Tue Aug 14, 2007 7:13 pm
Contact:

Re: Collision callback returns extra contacts (pymunk)

Post by slembcke »

I think I noticed this before actually, it's probably a precision issue in the poly to poly collision detection code. I'll have to look into it.

edit: Oh! No, I know what's causing that. I changed poly to poly collisions to use a partial convex hull when checking if a vertex is inside the other polygon. This fixes the problem where you detect that two poly's are overlapping but neither contains vertexes of the other. This happens with polygon that have long and thin or pointy parts on them. I guess a more correct thing to do would be to do the degenerate collision point search after a degenerate collision is found.

I committed the fix to trunk. You'll have to build pymunk from scratch with the trunk Chipmunk source to get the change though. (or poke viblio)
Can't sleep... Chipmunks will eat me...
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
Post Reply

Who is online

Users browsing this forum: Bing [Bot] and 4 guests