Skip to main content
GameDev.net gamedev.net
🔒 Locked

Impulse based friction on line segment

Started by celloe Feb 24, 2012 at 10:30 PM 0 replies 1.3k views
Original Post
celloe
celloe
Trying to figure out the friction impulse to apply on a circle rolling down a line segment, I've read a lot of other threads and it seems like it's kind of similar to the elastic impulse:


// nx & ny = contact normal
// fE = elastic impulse
// dx & dy = distance from center of mass to contact point

var tx = -ny;
var ty = nx;

var tCross = dx*ty-dy*tx;

var friction = .5;

var fF = tx*c.vx+ty*c.vy;
fF /= (c.inverseMass+(tCross*tCross)/c.momentOfInertia);

var fx = (fE*nx)+(friction*fF*tx);
var fy = (fE*ny)+(friction*fF*ty);

// xy velocity + angular

c.vx -= fx*c.inverseMass;
c.vy -= fy*c.inverseMass;

c.av -= (dx*fy-dy*fx)/c.momentOfInertia;


This is following the same sort of "pattern" adapted for the angular force as the usual
j = -(1 + e)rV . n / (n . n(iM1) + (pv1 . n)^2 / I1)

However when it came to the implementation, the behaviour of it's a little.. strange. Here's a demo - http://www.fileize.com/view/9137d063-58a/
I've tried clamping the friction to be a limit based on the elastic impulse but that didn't really do much. Could anybody enlighten me as to where I've slipped up?
celloe
celloe
Just as an update I figured out the cause of the problem, I was using the center of mass velocity as opposed to the contact point velocity.. silly. All fixed now!

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.