home *** CD-ROM | disk | FTP | other *** search
- (*
- >Does anyone have any equations for gravity??
-
- It's not as tough as you probably think it is. The way I work motion in
- my programs is, I keep track of the acceleration, velocity, and position
- of an object in both the x and y directions. In other words, I have these
- variables:
-
- var ax, ay, vx, vy, px, py: integer;
-
- When you have a force -- like gravity, or wind resistance, or whatever --
- you need to recalculate the accelerations every game round. Then you
- alter the velocities accordingly, and after that you change the positions.
- For example, each round you execute code like this:
-
- ax := {formula for force in the "x" direction};
- ay := {formula for force in the "y" direction};
-
- vx := vx + ax;
- vy := vy + ay;
-
- px := px + vx;
- py := py + vy;
-
- Notice how simple it is to keep track of motion: all you need to do is
- supply a formula for acceleration, and the program runs "blind" after
- that point.
-
- So gravity is just a matter of supplying the right "acceleration" formulas.
- If you are talking gravity near the surface of the earth, gravity provides
- very nearly a constant acceleration. In which case:
-
- ax := 0; {no "horizontal" gravity}
- ay := g; {a constant -- assign whatever value you like}
-
- For objects to fall "down" the screen, "g" should be positive. Motion
- towards the top of the screen would mean a negative velocity. That's
- because "y" coordinates increase from top to bottom, and frankly that
- confuses me and it confuses the numbers. You might do well to do this:
- have your calculations assume that "y" coordinates increase from bottom
- to top, and then draw at position (px, GetMaxY + 1 - py). With coordinates
- increasing from bottom to top, "g" should be negative and upward motion
- means positive "vy".
-
- If you want gravity as applies to celestial objects in orbit, the formulas
- for acceleration would be:
-
- x := px - sx; { new variables: sx and sy are the locations of the sun or }
- y := py - sy; { whatever, and x and y are thus the distances from it }
-
- ax := g*x / exp(3*ln(x*x + y*y)/2);
- ay := g*y / exp(3*ln(x*x + y*y)/2);
-
- Again, I recommend plotting at (px, GetMaxY + 1 - py); and again, "g"
- should be negative.
-
- Be advised that there is a singularity at the location of the sun or
- whatever: the "ln" calculations will fail. Another gravity formula I've
- seen used is "bowl" gravity, like a marble rolling around in a bowl. It's
- unrealistic, but it "feels" good and doesn't have a singularity. In which
- case:
-
- ax := g*x; { negative "g" again }
- ay := g*y;
-
- *)