tarzan physhics question

Show 40 post(s) from this thread on one page
Page 1 of 2 12 Last
• 02-25-2003, 07:36 PM
drunkenmaster2000
tarzan physhics question
I have a bit of a strange problem.

I'm working on a game engine that will incorporate jumping between ropes.
I was going to put this in the games forum, but I want to use proper maths, rather than trickery to achieve it, so I thought I'd be better off here.

I have the character running around, so I have gravity, inertia, values for speed and direction, swing radius, etc. But I don't know how to calculate the rotational velocity based on the 'incoming' velocity. To be honest, I don't know where to start. Should I constrict the character to a cirular path, or do it manually with trig?

I also need to be able to exit the swing and keep the same velocity and direction upon exit, but I think I know how that's done. It's just calculating the initial speed as he grabs the vine.

I'd provide some data, but there's not much I've got so far that would relate, if you know what I mean.
• 02-26-2003, 09:25 AM
drunkenmaster2000
Here's something I sketched up here at work quickly, to try and explain what I was talking about last night.

What it boils down to is that I need to be able to work out the acceleration/deceleration once the guy is swinging at a certain radius. I want to use maths for this, as it will give a more realistic interpretation of the forces involved.

I'd start with a guy (this doesn't relate totally to the picture) running along X at a set rate, say 1.5m/s. During this run, he would join the rope at it's bottom point, and start swinging. he would obviously lose speed, as he will be swinging up. He would then run out of speed, and start accelerating back down, and will hit the ground at just less than the speed he started at.
This way, the guy would join the rope, and start his rotation at 1.5m/s, which would then decrease, because of the climb.

As is usually the case with me, I can work out most of the theory, it's just the number-busting that breaks me.
• 02-27-2003, 11:26 PM
i tryin to do the same thing myself (half-pipe snowboard game)and havin real trouble. one thing that might help (which you prolly already got) is converting a distance to an angle along a circular path.
Code:

`rotation = (speed / radius) * (180/Math.PI);`
that way you have a starting point and an angle where you can calculate the next position of the character. i figure you could apply gravity to the speed prior to doing the calculation, it should only affect speed because the motion is constrained to the circle.
• 02-28-2003, 04:00 AM
drunkenmaster2000
Quote:

i tryin to do the same thing myself (half-pipe snowboard game)and havin real trouble. one thing that might help (which you prolly already got) is converting a distance to an angle along a circular path.
Code:

`rotation = (speed / radius) * (180/Math.PI);`
that way you have a starting point and an angle where you can calculate the next position of the character. i figure you could apply gravity to the speed prior to doing the calculation, it should only affect speed because the motion is constrained to the circle.

I've spent some time working it out and have come to the same decision.
As far as gravity is concerned, I think if you multiply gravity by the sin of the angle, and you should get something that resembles gravitational force at the given angle ( 90 degrees = full gravity, 135 degrees = 0.5 * gravity, 180 degrees = 0 * gravity.) I have yet to implement it, but when I do, I'll post the results up here. Along with the game, of course. :)

• 02-28-2003, 04:24 AM
if you want you could have a go at my problem;here's my useless attempt;
http://www.nlc.net.au/~oceana/swift/misc/math1.swf
http://www.nlc.net.au/~oceana/swift/misc/math1.fla
this is the way i'm tryin to do it;
the top-down view shows a top down view of the direction which the player is facing. when you hit the left/right arrow keys the player turns left/right. The red-cross identifies the players speed. i figure out the distance from the center of the mc to the cross and apply that to a circle and get the angle. this gives me the rotation (along the y axis) that i need to apply to the player (i know it's not 100% accurate but for my purposes it'll do).
Now is when it all goes to pot. i cannot for the life of me figure out how to apply gravity!!
thanks
• 02-28-2003, 03:32 PM
drunkenmaster2000
We're both approaching the same problem here, but I think, from different angles.

In the engine I'm making (platform game) gravity is a constant, and it's effect will be modified by the angle that the character is 'hanging at'.

Basically it boils down to this:

at the bottom of your circle, gravity will have 0% effect on motion. At the side of the circle, it will have 100% effect on motion.

The simplest way I can think of doing this, is to get the sine of the angle. (this is from memory, not sure it it's true, (also done in degrees))
sin(180) = 0 - at the bottom of the circle
sin(90) = 1
sin(270) = 1
sin(0) = 0

^^ this might be cos, you'll have to check it with a calculator.

multiplier = sin(angle)
effectivegravity = gravity * multiplier

I think this is how it works.

I plan to get my swinging problem done and dusted by the end of the weekend, and I'll post the swf/fla up here.

Good luck understanding me. I don't understand me most of the time. :D
• 03-01-2003, 03:19 PM
jonmack
Like a pendulum? - Look into simple pendulum physics and conservation of energy. Energy before = energy after.

Example - start at bottom of pendulum (potential enregy 0) and give a knock. Only energy is kinetic (mv^2/2). that'll get converted into potential (mgh) where h is height from bottom of circle (and can then be converted into angle from centre of circle to find position). So if all initial kinetic energy converted into potential, it'll stop at some point, h.

before:
PE + KE = 0 + mv^2/2

after:
PE + KE = mgh + 0

these must be equal (neglecting friction). That's the real way, but maybe you can do a simpler version and fake it so it just looks like that. Just thought you might be interested.
• 03-01-2003, 08:03 PM
drunkenmaster2000
Thanks for that, jonmack, my brain just popped. I'd like to look into it though.

back to my current problem though.

Here is a section of code:

Code:

```                if (glock) {                         // Distance to travel                         swingdist = xvel                         // swingdist = Math.sqrt((xvel*xvel)+(yvel*yvel)); // correct                         // Radius and circumference, need only be calculated once - Distance between belt and grapple                         distx = _x - _root.newgrap._x; // correct                         disty = _y + grapbelt._y - _root.newgrap._y; // correct                         if (!circcalc) {                                 roperad = Math.sqrt((distx*distx)+(disty*disty)); // correct                                 swingcirc = 3.14159265 * roperad * 2; // correct - 2 pi r                                 circcalc = true;                         }                         // Our current angle in radians and in degrees                         currangle = Math.atan2(distx,disty)+Math.PI; // correct (radians)                         theangle = (57.29578*currangle); // for display only                         // the amount we need to add to the angle, in radians                         addangle = ((swingdist/swingcirc)*360)/57.29578; // correct (radians)                         swingangle = currangle + addangle; // (radians)                         // this will give us the target coordinates                         destx = (Math.sin(swingangle)*roperad);                         desty = (Math.cos(swingangle)*roperad)+ grapbelt._y;                         this._x = destx;                         this._y = desty;                 } else {                 //carry on as per usual                 }```
okay, when the grapple becomes active, this bit of code will kick in on the 'char' (main character movieclip).

as you can see from it's current state, it's not working very well. But I've been staring at this thing all damn day, and I'm not getting anywhere.

I'd appreciate it if one of you guys could have a glance through and see if I made any glaring errors.

I checked each section with various different tests, and at the time of testing, they all produced the right results. I'm really stumped here.
• 03-01-2003, 09:09 PM
drunkenmaster2000
I've changed the fla slightly, and re-uploaded it, the fla can be found here.

It's closer now. A couple of the problems were caused by not using the right offsets for my movieclips.

Now it still doesn't work, but looks a bit more promising.
• 03-02-2003, 10:07 AM
drunkenmaster2000
Okay, I think I understand the basics of the PE/KE stuff, but before I can try implementing it, I need to be able to get the char clip to orbit around it's central point.

I've clipped the code down to basics. I made the angle to add a constant, rather than derived, which should remove any errors there, And I only calculate the current angle once, so that should be a constant.

The trouble is, he's supposed to move anticlockwise at a set radius, and he does, until he gets to about 4'o clock, then he just shoots off to the side, and sort of sticks there.

I'm pretty sure I've just made some bean-error in my code, but I can't find it.

Code:

```                if (glock) {                         mex = this._x;                                                  // for display/ease purposes                         mey = this._y + grapbelt._y;                        // for display/ease purposes                         // Radius need only be calculated once - Distance between belt and grapple                         distx = mex - _root.newgrap._x; // correct                         disty = mey - _root.newgrap._y; // correct                         if (!circcalc) {                                 roperad = Math.sqrt((distx*distx)+(disty*disty)); // correct                                 currangle = Math.atan2(distx,disty)+Math.PI; // correct (radians)                                 swingangle = currangle;                                        // (radians)                                 circcalc = true;                         }                         // the amount we need to add to the angle, in radians                         addangle = -0.5/57.29578; // one degree, in radians                         swingangle += addangle; // (radians)                         xvel1 = (Math.sin(swingangle)*roperad)+distx;                         yvel1 = (Math.cos(swingangle)*roperad)+disty;                         this._x += xvel1;                         this._y -= yvel1;                 } else {                 //Carry on as per usual                 }```
please help if you can, this is driving me mental, and my eyes are starting to sting..

Edit: After browsing through some 50 websites, I have found 'exactly' what I'm looking for, but it's an applet, so no way of finding out how it's done.

http://www.materialworlds.com/sims/Pendulum/sim.html

You may need to install a program to watch the simulation.

Even a simplified version of this with a set radius would be a good start.

But I still need to get that bugger travelling in a circle first...
• 03-02-2003, 11:25 AM
drunkenmaster2000
oh my god.

problem solved.

these lines:

should have been:

I was using the wrong offsets, making me look somewhat divvy. I was using the offset from the character's current position, and not from the pivot point.

I'm gonna go soak my head now. And probably punch myself in the face.

fla
swf
• 03-02-2003, 03:11 PM
drunkenmaster2000
Okay, after a brief soaking, I tidied my code up a little (very little, actually), and am at the point where I can just give it an angle, and it will go to said angle. I also have left and right set to influence the swing speed (like stinking your legs out on a swing, etc.) So now I just have to calculate gravity, and add it in there every frame.

This is where I come unstuck. I have been through several websites explaining the physics needed to do this, and the calculations, but I can't figure out how to get these calculations into flash.

my variables are:

mass
gravity
velocity
original angle (from which I can derive height)

I haven't started writing any code yet, but I'm so confused that I don't think it will help. It is some combination of the above, but god knows what.

I only need to work out what angle I will be moving to given my current angle, velocity, and gravity.

• 03-03-2003, 04:18 AM
drunkenmaster2000
Blinkok, I think I found what wee are both looking for on bit-101's site - www.bit-101.com go to July 8 2002. Sadly, the source for this one is no longer on his site. I asked for a copy on the forums there, but I don't know if anyone will have it.

I hope they do, cos it looks totally beyond me. :|

As far as my game thing goes, it's coming along quite well, I've managed to work out the calculation for exit velocity, but with out the corresponding calculation for entry velocity, it doesn't flow too well. Providing it's just the opposite of exit vel, then I should be able to do it after work tonight.
• 03-03-2003, 04:57 AM
yeah i'm tryin to buy the cd now but they got a problem with international orders.
• 03-03-2003, 01:13 PM
tomsamson
blinkok,i have all of them at home :)
• 03-03-2003, 01:34 PM
drunkenmaster2000
Quote:

Originally posted by tomsamson
blinkok,i have all of them at home :)
tom, any chance you could send the 20020708.fla to me, and quite possibly Blinkok too?

Reach me via one of my IM's if you can, and thanks.

Sadly, I am also subject to international order restrictions.

I'm thinking about buying one of the FoEd books, though. The one I got was most helpful, but was more an all-rounders ref manual..
• 03-03-2003, 04:58 PM
thanks tom, i think i'll still buy the cd but it would be great to get the skater dude in the mean time.
• 03-04-2003, 08:03 PM
tomsamson
i think iŽll buy the cd,too,i have all the flas on various different cd s,so its no fun searching for a particular one..
• 03-05-2003, 04:03 AM
drunkenmaster2000
Ooops!

Okay, I've turned on my PM's. but I've got to run off to work now :/

I'll be in touch later.

while I was working out all my momentum conservation, I've made a few steps forward with my game engine, try it here!
• 03-05-2003, 07:04 AM
drunkenmaster2000
lol, I only just saw my typo in the thread title :D Don't think I'm stupid, But maths had probably beaten me in that evenings knife battle, and left me weary.

Nevertheless, I've made some progress, as I said, and as it turns out, I don't think bit-101's fla is really what I'm after, although it is close.

I've managed to work out the rotation speed, the angle and velocity on exit, and recently the code that works out how much speed you lose from hitting the swing circumference at an angle (which I think I fluked ;) )

Tonight, I should be able to add the gravity calculations for a rigid arm system, and from there, decide if I want to do a sprung-arm one too (which would be cool)
Show 40 post(s) from this thread on one page
Page 1 of 2 12 Last