Universe SandboxGeneral CategoryUniverse Sandbox v1 Discussion (2009 version)Making my own simulator?
Pages: 1
PrintPrint
Author Topic: Making my own simulator?  (Read 724 times)
atomic7732
Beta Team

*****
Posts: 2651


Like a scientific expert. With magic.


WWW
« on: January 05, 2009, 06:24:48 PM »

 Huh Huh Huh Huh If you could help me with how to start a program, just a simple one like your "planets" one. It doesn't even have to be in 3D, 2D would satisfy me for now. Unless, you wanted to tell me. I only want to make simple. Like 10-20 Objects, solid color... run on XML files (if possible)...
« Last Edit: January 05, 2009, 11:23:32 PM by Dan Dixon » Logged
Dan Dixon
Creator of
Universe Sandbox

*****
Posts: 2407



WWW
« Reply #1 on: January 05, 2009, 11:23:12 PM »

Good times. A simple gravity simulator isn't too difficult get working.

Screenshots of my earlier work ('Planets') can be found here:
http://dandixon.us/programming/planets.htm

What language will you be writing this in?

And turns out there's little difference between 2D and 3D as far as the math is concerned.

You're going to want to create a class for each body. This needs to have variables to store the X,Y,Z position and X,Y,Z velocity of each body along with the mass. Diameter, Color, Texture, etc... are all optional.

You'll start by either hard coding the initial positions and velocities or loading them from a file.

Then for each frame of the simulation you'll calculate the change in velocity of each body on every other body:

Here's some pseudo-code:

Code:
For A = 1 to Total#OfBodies
  For B = 1 to Total#OfBodies
    If A is not equal to B then
      D = Distance between bodies A & B
      Force = G * MassOfB / D * D
      VelocityChange.X = VelocityChange.X + (Force  * (X distance between bodies A & B) / D))
      VelocityChange.Y = VelocityChange.Y + (Force  * (Y distance between bodies A & B) / D))
      VelocityChange.Z = VelocityChange.Z + (Force  * (Z distance between bodies A & B) / D))
  Next B
  BodyAVelocity = BodyAVelocity + (Fv * TimeScale)
Next A

G = Gravity Constant
I use:   6.6725985 * (10 ^ (-11)) * (59736 * (10 ^ 20))    which is the 'real gravity constant in kg' * the mass of earth (since I store all masses where 1 = Earth)
Starting out you can just set G = 1 or .00001 or something like that.
TimeScale is the length of time that each frame represents. Again, just hardcode this to be 1.

Then once you've calculated each body's new velocity for that frame you add it to its current position:

Code:
For A = 1 to Total#OfBodies
  BodyAPosition = BodyAPosition + (BodyAVelocity * TimeScale)
Next A

Then you draw the scene using the new positions that you just calculated.

Does that help? Just ask if you have any more questions. I'd enjoy seeing what you come up with.
Logged
atomic7732
Beta Team

*****
Posts: 2651


Like a scientific expert. With magic.


WWW
« Reply #2 on: January 06, 2009, 03:17:23 PM »

Do I just put those into an .exe or whatever? I never made a program before. Do I edit what you typed or what. I'm going to get a friend that knows a little bit of programing. If I show him this he MIGHT be able to help me.
« Last Edit: January 06, 2009, 03:28:28 PM by NeutronStar » Logged
Dan Dixon
Creator of
Universe Sandbox

*****
Posts: 2407



WWW
« Reply #3 on: January 06, 2009, 05:37:47 PM »

If you've never programed before than a gravity simulator might be a bit complicated to take on as a first project.

If you'd like to learn about programming check out Microsoft's Small Basic. It's designed for beginners and is a great way to get started:
http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx

Logged
atomic7732
Beta Team

*****
Posts: 2651


Like a scientific expert. With magic.


WWW
« Reply #4 on: January 06, 2009, 07:21:05 PM »

ok thanks
Logged
Pages: 1
PrintPrint
Jump to: