Computer Science Canada Programming C, C++, Java, PHP, Ruby, Turing, VB   Username:   Password: Wiki   Blog   Search   Turing   Chat Room  Members
Perfect Circle - Circle Collision Detection
Author Message
MichaelM

Posted: Fri Jun 27, 2008 10:42 am   Post subject: Re: Perfect Circle - Circle Collision Detection

Wow Zylum, great tutorial. You've really come up with a great way of doing circle collision detection, which looks complicated, but it all makes so much sense.

However, I'm having a bit of trouble figuring out what you've done for circle collision reaction. I'm a little lost with some of the variables you're using in the collision procedure. Could you, or anyone else who understands it all, tell me whats going on with nx,ny and p. Also, I'm not sure I understand what vxp and vyp are being used for.

 code: proc collide (var b1, b2 : BallData)     var nx := (b1.x - b2.x) / (b1.r + b2.r)     var ny := (b1.y - b2.y) / (b1.r + b2.r)     var a1 := b1.vx * nx + b1.vy * ny     var a2 := b2.vx * nx + b2.vy * ny     var p := 2 * (a1 - a2) / (b1.m + b2.m)     b1.vxp := b1.vx - p * nx * b2.m     b1.vyp := b1.vy - p * ny * b2.m     b2.vxp := b2.vx + p * nx * b1.m     b2.vyp := b2.vy + p * ny * b1.m end collide

Soundman

Posted: Tue Jul 29, 2008 4:32 am   Post subject: Re: Perfect Circle - Circle Collision Detection

 code: proc collide (var b1, b2 : BallData)     var nx := (b1.x - b2.x) / (b1.r + b2.r)     - the normalised vector in the x direction     var ny := (b1.y - b2.y) / (b1.r + b2.r)     - the normalised vector in the y direction     var a1 := b1.vx * nx + b1.vy * ny          - 1st ball impulse     var a2 := b2.vx * nx + b2.vy * ny          - 2nd ball impulse     var p := 2 * (a1 - a2) / (b1.m + b2.m)    - resultant impulse     b1.vxp := b1.vx - p * nx * b2.m              - ball1 resultant Vx value     b1.vyp := b1.vy - p * ny * b2.m              - ball1 resultant Vy value     b2.vxp := b2.vx + p * nx * b1.m              - ball2 resultant Vx value     b2.vyp := b2.vy + p * ny * b1.m              - ball2 resultant Vy value end collide
Georgey Boy

Posted: Thu Nov 13, 2008 3:38 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

Hi, i am working on the same thing in C#...

Great Solutions zylum!!! thank you...helps a lot!!!

So I need help...

I have an array of class Ball...
each ball has PointF positon; PointF vector;

I have timer that ticks...) So each time...
position += vector * time //well it looks different due to PointF class specs...but that what it does

I already figure out how to move balls away from each other in case of collision...

Now I need to figure out vectors after collision...

I am wondering about some vars...

b1.vxp := b1.vx - p * nx * b2.m - ball1 resultant Vx value
b1.vyp := b1.vy - p * ny * b2.m - ball1 resultant Vy value

What is b2.m? is it center or middle or mass? what if mass is the same? or it does not matter?

Also b2.vxp...
[Gandalf]

Posted: Thu Nov 13, 2008 9:19 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

I believe ball.m is the area of the ball, from a quick glance at the code, since it's initialized to:
 code: Math.PI * balls (i).r ** 2

Edit: Oh, as for p, it could be momentum if I'm remembering my physics correctly. Don't quote me on it though!
Edit2: Ah right, it's impulse, change in momentum. Just read the post directly above yours. It's all coming back now.
Georgey Boy

Posted: Sat Nov 15, 2008 4:09 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

thank you [Gandalf] fo responce...

now I see that mass is just its area...
nevertheless i new what p was...I was wondering about b1.vxp...

Plus I wondering what this code does...is it wall collision?

if balls (i).x < 1 or balls (i).x > maxx then
balls (i).vxp *= -1
end if
if balls (i).y < 1 or balls (i).y > maxy then
balls (i).vyp *= -1
end if
SNIPERDUDE

Posted: Sat Nov 15, 2008 4:31 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

Yes.
S_Grimm

Posted: Sat Nov 15, 2008 5:40 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

Great Tutorial.
+Karama
DanielG

Posted: Sun Nov 16, 2008 10:25 am   Post subject: RE:Perfect Circle - Circle Collision Detection

yes, I might try to implenet it, so far I only used simple circle collision (the bad kind).

corriep

Posted: Tue Nov 25, 2008 5:31 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

WOW, just WOW

great tutorial, +bits

Could you explain the collision procedure.

I tried to follow it but it went way above my head!
matt271

Posted: Sun Apr 05, 2009 1:45 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

i like ur method, but its pretty complicated.
did u come up w/ this urself??

i have come up w/ my own method i would like to show u and maybe get ur input on.

i posted it here (its in java) http://compsci.ca/v3/viewtopic.php?t=20676
carlessr

Posted: Sat Jan 30, 2010 2:49 pm   Post subject: Re: Perfect Circle - Circle Collision Detection

Fantastic tutorial, however i have a question.

If I were to give one of the circles infinite mass (ie a mass of 0) then the Collision Response function doesn't seem to work.

Is this intentional?
SNIPERDUDE

Posted: Sat Jan 30, 2010 3:21 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

What wins: an unstoppable force, or an unmovable object?
How can one determine the physics of an object with no defined mass? Even if we say it is extremely minute, or extremely large values, they are still given values.
carlessr

Posted: Sun Jan 31, 2010 6:13 am   Post subject: Re: Perfect Circle - Circle Collision Detection

I was just wondering if I could rearrange the applycollision to zero out a force if the mass was zero.
SNIPERDUDE

Posted: Sun Jan 31, 2010 3:03 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

You could make an exception perhaps.
SNIPERDUDE

Posted: Tue Feb 02, 2010 9:37 pm   Post subject: RE:Perfect Circle - Circle Collision Detection

SPAM.
 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First

Page 2 of 3  [ 34 Posts ]
Goto page Previous  1, 2, 3  Next
 Jump to:  Select a forum  CompSci.ca ------------ - Network News - General Discussion     General Forums   -----------------   - Hello World   - Featured Poll   - Contests     Contest Forums   -----------------   - DWITE   - [FP] Contest 2006/2008   - [FP] 2005/2006 Archive   - [FP] 2004/2005 Archive   - Off Topic     Lounges   ---------   - User Lounge   - VIP Lounge     Programming -------------- - General Programming     General Programming Forums   --------------------------------   - Functional Programming   - Logical Programming   - C     C   --   - C Help   - C Tutorials   - C Submissions   - C++     C++   ----   - C++ Help   - C++ Tutorials   - C++ Submissions   - Java     Java   -----   - Java Help   - Java Tutorials   - Java Submissions   - Ruby     Ruby   -----   - Ruby Help   - Ruby Tutorials   - Ruby Submissions   - Turing     Turing   --------   - Turing Help   - Turing Tutorials   - Turing Submissions   - PHP     PHP   ----   - PHP Help   - PHP Tutorials   - PHP Submissions   - Python     Python   --------   - Python Help   - Python Tutorials   - Python Submissions   - Visual Basic and Other Basics     VB   ---   - Visual Basic Help   - Visual Basic Tutorials   - Visual Basic Submissions     Education ----------- - Student Life   Graphics and Design ----------------------- - Web Design     Web Design Forums   ---------------------   - (X)HTML Help   - (X)HTML Tutorials   - Flash MX Help   - Flash MX Tutorials   - Graphics     Graphics Forums   ------------------   - Photoshop Tutorials   - The Showroom   - 2D Graphics   - 3D Graphics     Teams ------ - dTeam Public

 Style: Appalachia blueSilver eMJay subAppalachia subBlue subCanvas subEmjay subGrey subSilver subVereor Search: