Can this be reduced further?

Started by
5 comments, last by pTymN 16 years, 10 months ago
-vn = dV0.y * t + sin(atan2(R0)) * |R0| - sin(atan2(R0) + dW0 * t) * |R0| I think that -vn = dV0.y * t + R0.y - sin(atan2(R0.y, R0.x) + dW0 * t) * |R0| is valid, but I feel that I can do even better.

Advertisement
-vn = dV0.y * t + R0.y - R0.y * cos(dW0 * t) + R0.x * sin(dW0 * t)

because

sin(x + y) = sin(x)cos(y) * cos(x)sin(y)

according to

http://en.wikipedia.org/wiki/List_of_trigonometric_identities

I had a typo...

-vn = dV0.y * t + R0.y - cos(dW0 * t) * R0.y - sin(dW0 * t) * R0.x

but I still need to solve this for t.

What happened to |R0| in that first step? There's no way to eliminate it in general. Is there something you're not telling us?

Some more identities that may come in handy are:

sin(arctan(x)) = x/√(1 + x2)
cos(arctan(x)) = 1/√(1 + x2)

Edit: This doesn't make sense, in the light of R0 being a vector.
You can end up with a giant fact or of |R0|/√(1 + R02) after applying these (as |R0|2 = R02). I get:

0 = vn - dV0.y * t + |R0|/√(1 + R02) (R0(1 - cos(dW0 * t)) + sin(dW0 * t))

That last term with (A.cos(x) + sin(x)) can be turned into B.sin(x + C) if you like. Anyway, solution is a little ambiguous. There are a lot of constants floating about and they all have an impact on uniqueness of solution. Provided vn is small enough, a solution will exist. Provided R0 isn't particularly awkward, boundedness of (sin + cos) will get you a solution if you iterate on t.

May I ask where you derived this from?

Admiral

[Edited by - TheAdmiral on May 24, 2007 5:46:53 PM]
Ring3 Circus - Diary of a programmer, journal of a hacker.
R0 is a vector2D, so atan(R0) is really atan2(R0.y, R0.x).

I'm trying to determine, given a ratio of rotational to translational change in response to a collision, what amount of the changes to apply towards my object's rotational velocity and translational velocity in order to cause it to neither penetrate nor separate from the other fixed object.

Quote:Original post by pTymN
R0 is a vector2D, so atan(R0) is really atan2(R0.y, R0.x).

I'm trying to determine, given a ratio of rotational to translational change in response to a collision, what amount of the changes to apply towards my object's rotational velocity and translational velocity in order to cause it to neither penetrate nor separate from the other fixed object.

I see. Well since R0 and vn are essentially arbitrary, there will be no guarantee of a quick-to-converge solution. And as far as I can see, there is no way to manipulate the equation into explicit form.

Wouldn't you be much better off just fudging it, and setting the body to be stationary, letting conservation of momentum take care of the rest? I'm just guessing - I've never had to do this kind of thing. Sure enough though, this problem must have been solved before, so maybe somebody else can guide you better than me.

Admiral
Ring3 Circus - Diary of a programmer, journal of a hacker.
I've avoided the problem completely at this point. :-) The problem was that for an object that can rotate, when it hit the floor, my iterative solver was going around and around pushing up on the various contact points, but the object's low angular mass meant that those pushes weren't doing much for actually pushing the object UP. Now I'm looking for those scenarios and treating them as if there was only one contact point between the center of mass of the object and the stationary one.

This topic is closed to new replies.

Advertisement