A Flash Developer Resource Site

Results 1 to 8 of 8

Thread: collision response from verlet

  1. #1
    Junior Member
    Join Date
    Dec 2005
    Posts
    22

    collision response from verlet

    Hi
    Im using the Jacobsen article to work on a 2D physics engine. However, I got the stick to move realistically but Im not sure what to do on the collision detection part. My current method allows me to detect whether or not there's been a collision but not what the penetration points are. How would I go about finding these, or if theres a better way of handling response, what would I do?
    Thanks
    ps: This isn't in actionScript as I want to use a language Im familiar wiith first before I port it to AS.

  2. #2
    Senior Member ozmic66's Avatar
    Join Date
    Oct 2005
    Posts
    472

    start with circles

    Hey, i posted here a while back about a 2d verlet engine for flash that i'm working on, and actually i just started working on it again not too long ago
    (link)

    my suggestion to you is first make circle collision/response

    it doesn't have to be completely elastic, or accurate, but it still looks good if you use this method: (which is what i used)

    i persume you know how to check if 2 circles have collided (if the distance between their centers in less then the sum of their radii)

    for collision response, think about it as putting in a stick in between the circles every time they over lap (for that one timestep only) or in other words, move both circles in the opposite direction so that their distance equals the sum of their radii (and with the verlet integration their speeds will be affected as well)

    try that and add as many circles as you want because it is very stable

    once you have circle collision you should move onto circle-line collision and these are pretty much all of the things that you'll need

    if you need any help just post here or send me a message
    good luck!
    Last edited by ozmic66; 01-01-2006 at 09:27 AM.

  3. #3
    Junior Member
    Join Date
    Dec 2005
    Posts
    22
    Thanks ozmic66. Just a quick question before I start with the circle stuff. What did you use for your (very nice) engine in terms of verlet algorithm? For my stick I was using:
    p1.y# = (p1.y# + (p1.y# - o1#) + vy# * 0.5)
    p2.y# = (p2.y# + (p2.y# - o2#) + vy# * 0.5)

    where p1.y# = current pos and o1# = old position. vy# = gravity and 0.5 is the timestep although Im not sure what I am actually supposed to use there?

    however, the jakobsen paper says to use:
    x' = 2x - x* + a·Δt2
    but that messes up the whole thing for my system if I put a '2' in front of everything.

    any ideas why?
    Thanks again for the help.

  4. #4
    Senior Member ozmic66's Avatar
    Join Date
    Oct 2005
    Posts
    472
    hmm...

    all good questions...

    here's what I use:
    (copied from the code)

    x+=((x-oldPosition.x)+(Acceleration.x*timeStep*timeStep)) *cWorld.getDrag()
    y+=((y-oldPosition.y)+(Acceleration.y*timeStep*timeStep)) *cWorld.getDrag()

    where:

    acceleration is the sum of all the forces acting on the particle (gravity,wind maybe)
    also, dont forget to reset the acceleration to 0 at the end of the verlet code

    cWorld.getDrag() is a number between 0 and 1
    i don't add a '1' to it (hence multiplying by a number from 1 to 2) because as you see, i'm adding that value to the already existing one

    now the timestep i keep at one

    what the timestep controls is how much of its movement the particle should do in one frame

    at 1 it's 100%
    if you want to slow down time, then you can set it to something like 0.5 or any other number

    to speed up time..guess what..1+

    hope that helped

  5. #5
    Junior Member
    Join Date
    Dec 2005
    Posts
    22
    Thanks a lot ozmic66. I tried getting the circle collisions to work. I can get them to detect collision but I cant get them to travel in opposite directions. Is there a chace you could show some psuedo code or an article that might help. Im mainly stuck on how to "put a stick" in between and try and get the objects to move in the right direction after collision.
    Thanks again and happy new year!

  6. #6
    Senior Member ozmic66's Avatar
    Join Date
    Oct 2005
    Posts
    472
    happy new year

    i find it best to use vectors in this case becaue they make everything easier

    i don't know how firmiliar you are with vector math so here is a little explenation

    a vector holds two pieces of information: 'x' and 'y' - you can also see these as 'run' and 'rise'. a vector can be used as a smiple point in space or something that contains the properties of a line (only without coordiantes in space) - i know it might sound kinda confusing, and that's because this isn't the best explenation so you should probably read some more about it.

    now here is how you would use vectors to move to objects away from eachother

    psuedo code:

    if collision =true then
    //find the vector between the two circles
    vectorX=circle1.x-circle2.x
    vectorY=circle1.y-circle2.y
    //find the distance between the circles//
    dist = sqrt(vectorx*vectorX+vectorY*vectorY)
    //find the distance that both circles should move in order to not overlap
    distDiff=(circle1.radius+circle2.radius)-dist
    distForEachCircle=distDiff/2
    //normalize the vector with the desired length - this is what vectors are good for
    vectorX=vectorX/dist * distForEachCircle
    vectorY=vectorY/dist * distForEachCircle

    //add the vector to circle 1

    circle1.x+=vectorX
    circle1.y+=vectorY

    //subtract it from circle 2

    circle1.x-=vectorX
    circle1.y-=vectorY

    end if

    so here, it's a little more than psuedo code, but that can't hurt can it?

    good luck

  7. #7
    Iron Chef In-Training OpethRockr55's Avatar
    Join Date
    Sep 2005
    Location
    Kitchen Stadium
    Posts
    313
    A Verlet Flasher's (He he) must-go-to place would be the Metanet tutorials. They have an in-depth tutorial just on collision detection using Verlet Integration.

    Not that I'm saying Ozmic's method is bad... in fact, he's probably got the best Collision Detection code here, but it is a nice place to see what you can really do with advanced Verlet collision.

  8. #8
    Junior Member
    Join Date
    Dec 2005
    Posts
    22
    Thanks a lot ozmic66, that was really helpful!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center