The incredibly weird physics of space-flight

Lately, I've been debating space-flight video games with my friends. One of the complained that games like Rogue Squadron -- an incredibly cool Star Wars-themed game -- is weirdly unrealistic. "The ships are in outer space, but they fly like planes," he argued. For example, when you try to turn, your ship has a big turning radius -- even though it's not pushing against any air. A real space-ship could just instantly rotate itself in any direction it wanted and shove off.
I argued with him, posing the alternative question: Who wants real physics? The whole point of a game is to present you with a version of reality that's as stylized as a sonnet. In fact, if the game actually represented the realistic physics of the cosmic void, controlling those X-wings and TIE Fighters would be a total nightmare. Space physics are incredibly weird.
That's what NASA found back in the 60s, when it first tried to do something you'd expect would be quite simple: To dock two spacecraft together. There's a superb story in last year's Invention and Technology magazine on this. NASA had a Gemini capsule fly up to an empty rocket casing that was floating in order, and try to dock with it from behind. But, as the astronaut in control found, the physics quickly became awfully strange:
... simply pointing the craft toward the target and firing his rear attitude thrusters did not help him overtake the spent stage, as one would expect. Instead, the distance between them actually increased, as if he were pressing a car’s gas pedal in forward gear and the car was moving in reverse.
This was where Newtonian mechanics kicked in. By increasing his craft’s speed, he had increased its distance from the earth. In this new, higher orbit, the craft’s linear velocity, measured in miles per hour, was greater than before. But its angular velocity—the rate at which it was traveling around the earth, measured in revolutions per hour—was lower. As Kepler had pointed out, objects in low orbits will complete an orbit around the earth faster than those in high orbits, even though their linear velocity is lower.
Thus, by speeding up his spacecraft, McDivitt had made it circle the earth more slowly than the craft he was trying to catch up with. Mission Control had to call off the rendezvous, since McDivitt was using too much fuel. NASA engineers and astronauts extracted a valuable lesson from this mission: It was difficult, if not impossible, to steer a spacecraft merely by eye. The orbital dynamics are so counterintuitive that—combined with the lack of references for judging distances—no human could do the job without help from electronic sensors.
All of which goes to show: Realism is a huge pain in the ass. I've never entirely understood people who assume that "realism" is the tautological goal of video games; the more realistic they are, the more fun they'll be. Quite the contrary! Sure, the Y-wing fighters in these games are as easy to pilot as a Camaro. But I wouldn't have it any other way. I get enough reality sitting here at my bloody desk, thank you very much.
Posted by Clive Thompson at July 21, 2003 07:41 PM
Trackback Pings
TrackBack URL for this entry: http://www.collisiondetection.net/mt3/mt-tb.cgi/416
Posted by: Robert at July 28, 2003 1:19 PM
Posted by: Clive at July 28, 2003 1:31 PM
Posted by: Robert at July 28, 2003 2:06 PM
Posted by: dsl tarife at January 2, 2004 4:08 PM
Posted by: Gabriola Island at January 10, 2004 6:23 AM
Posted by: Online Casino at January 16, 2004 2:54 AM
Let's see an example by converting our favoriteNumber variable from a stack variable to a heap variable. The first thing we'll do is find the project we've been working on and open it up in Project Builder. In the file, we'll start right at the top and work our way down. Under the line:
Posted by: Ebotte at January 19, 2004 6:59 PM
This is another function provided for dealing with the heap. After you've created some space in the Heap, it's yours until you let go of it. When your program is done using it, you have to explicitly tell the computer that you don't need it anymore or the computer will save it for your future use (or until your program quits, when it knows you won't be needing the memory anymore). The call to simply tells the computer that you had this space, but you're done and the memory can be freed for use by something else later on.
Posted by: Annanias at January 19, 2004 6:59 PM
When the machine compiles your code, however, it does a little bit of translation. At run time, the computer sees nothing but 1s and 0s, which is all the computer ever sees: a continuous string of binary numbers that it can interpret in various ways.
Posted by: Mable at January 19, 2004 6:59 PM
Inside each stack frame is a slew of useful information. It tells the computer what code is currently executing, where to go next, where to go in the case a return statement is found, and a whole lot of other things that are incredible useful to the computer, but not very useful to you most of the time. One of the things that is useful to you is the part of the frame that keeps track of all the variables you're using. So the first place for a variable to live is on the Stack. This is a very nice place to live, in that all the creation and destruction of space is handled for you as Stack Frames are created and destroyed. You seldom have to worry about making space for the variables on the stack. The only problem is that the variables here only live as long as the stack frame does, which is to say the length of the function those variables are declared in. This is often a fine situation, but when you need to store information for longer than a single function, you are instantly out of luck.
Posted by: William at January 19, 2004 7:00 PM
Seth Roby graduated in May of 2003 with a double major in English and Computer Science, the Macintosh part of a three-person Macintosh, Linux, and Windows graduating triumvirate.
Posted by: Lewis at January 19, 2004 7:00 PM
These secret identities serve a variety of purposes, and they help us to understand how variables work. In this lesson, we'll be writing a little less code than we've done in previous articles, but we'll be taking a detailed look at how variables live and work.
Posted by: Ambrose at January 19, 2004 7:00 PM
That gives us a pretty good starting point to understand a lot more about variables, and that's what we'll be examining next lesson. Those new variable types I promised last lesson will finally make an appearance, and we'll examine a few concepts that we'll use to organize our data into more meaningful structures, a sort of precursor to the objects that Cocoa works with. And we'll delve a little bit more into the fun things we can do by looking at those ever-present bits in a few new ways.
Posted by: Dionisius at January 19, 2004 7:00 PM
Being able to understand that basic idea opens up a vast amount of power that can be used and abused, and we're going to look at a few of the better ways to deal with it in this article.
Posted by: Cassandra at January 19, 2004 7:00 PM
Seth Roby graduated in May of 2003 with a double major in English and Computer Science, the Macintosh part of a three-person Macintosh, Linux, and Windows graduating triumvirate.
Posted by: Quivier at January 19, 2004 7:00 PM
When the machine compiles your code, however, it does a little bit of translation. At run time, the computer sees nothing but 1s and 0s, which is all the computer ever sees: a continuous string of binary numbers that it can interpret in various ways.
Posted by: Helen at January 19, 2004 7:01 PM
Posted by: julia at January 24, 2004 8:16 PM
Post a comment
Great piece Clive!
Posted by: Robert at July 28, 2003 1:19 PM
Thanks!!
Posted by: Clive at July 28, 2003 1:31 PM
Great piece Clive!
Posted by: Robert at July 28, 2003 2:06 PM
ratenkredite sofortkredit kredit autofinanzierung autokredit kredite kredit ratenkredite sofortkredit kredit autofinanzierung autokredit autokredit kredit autokredit dsl angebot dsl dsl dsl tarife dsl flatrate isdn xxl dsl bestellen dsl dsl flatrate dsl dsl dsl angebote 1&1 apotheke medikamente arzneimittel kreditkarte kreditkarten medikamente apotheke kredite kredite kredite kredit kredit ratenkredit ratenkredit sofortkredit onlinekredit finanzierung medikamente medikamente medikamente arzneimittel
Posted by: dsl tarife at January 2, 2004 4:08 PM
The Gabriola Island Community Forum
Gabriola Island Links And Other Gabriola Websites
Information About Gabriola Island
[ Gabriola Island ]
[ The Gabriola Sounder ]
[ Gabriola Island Real Estate ]
[ Gabriola Real Estate ]
[ A Gabriola Island bc ]
[ Gabriola ]
[ Gabriola Island Real Estate ]
[ Gabriola Island Real Estate ]
[ Gabriola Bed And Breakfast ]
[ Gabriola Island Real Estate ]
[ Gabriola Sounder ]
[ Gabriola Sounder ]
[ Gabriola Cycle Kayak ]
[ Gabriola Coast Realty ]
[ Gabriola Island British Columbia ]
Posted by: Gabriola Island at January 10, 2004 6:23 AM
Nice site. thx.
Posted by: Online Casino at January 16, 2004 2:54 AM
Let's see an example by converting our favoriteNumber variable from a stack variable to a heap variable. The first thing we'll do is find the project we've been working on and open it up in Project Builder. In the file, we'll start right at the top and work our way down. Under the line:
Posted by: Ebotte at January 19, 2004 6:59 PM
This is another function provided for dealing with the heap. After you've created some space in the Heap, it's yours until you let go of it. When your program is done using it, you have to explicitly tell the computer that you don't need it anymore or the computer will save it for your future use (or until your program quits, when it knows you won't be needing the memory anymore). The call to simply tells the computer that you had this space, but you're done and the memory can be freed for use by something else later on.
Posted by: Annanias at January 19, 2004 6:59 PM
When the machine compiles your code, however, it does a little bit of translation. At run time, the computer sees nothing but 1s and 0s, which is all the computer ever sees: a continuous string of binary numbers that it can interpret in various ways.
Posted by: Mable at January 19, 2004 6:59 PM
Inside each stack frame is a slew of useful information. It tells the computer what code is currently executing, where to go next, where to go in the case a return statement is found, and a whole lot of other things that are incredible useful to the computer, but not very useful to you most of the time. One of the things that is useful to you is the part of the frame that keeps track of all the variables you're using. So the first place for a variable to live is on the Stack. This is a very nice place to live, in that all the creation and destruction of space is handled for you as Stack Frames are created and destroyed. You seldom have to worry about making space for the variables on the stack. The only problem is that the variables here only live as long as the stack frame does, which is to say the length of the function those variables are declared in. This is often a fine situation, but when you need to store information for longer than a single function, you are instantly out of luck.
Posted by: William at January 19, 2004 7:00 PM
Seth Roby graduated in May of 2003 with a double major in English and Computer Science, the Macintosh part of a three-person Macintosh, Linux, and Windows graduating triumvirate.
Posted by: Lewis at January 19, 2004 7:00 PM
These secret identities serve a variety of purposes, and they help us to understand how variables work. In this lesson, we'll be writing a little less code than we've done in previous articles, but we'll be taking a detailed look at how variables live and work.
Posted by: Ambrose at January 19, 2004 7:00 PM
That gives us a pretty good starting point to understand a lot more about variables, and that's what we'll be examining next lesson. Those new variable types I promised last lesson will finally make an appearance, and we'll examine a few concepts that we'll use to organize our data into more meaningful structures, a sort of precursor to the objects that Cocoa works with. And we'll delve a little bit more into the fun things we can do by looking at those ever-present bits in a few new ways.
Posted by: Dionisius at January 19, 2004 7:00 PM
Being able to understand that basic idea opens up a vast amount of power that can be used and abused, and we're going to look at a few of the better ways to deal with it in this article.
Posted by: Cassandra at January 19, 2004 7:00 PM
Seth Roby graduated in May of 2003 with a double major in English and Computer Science, the Macintosh part of a three-person Macintosh, Linux, and Windows graduating triumvirate.
Posted by: Quivier at January 19, 2004 7:00 PM
When the machine compiles your code, however, it does a little bit of translation. At run time, the computer sees nothing but 1s and 0s, which is all the computer ever sees: a continuous string of binary numbers that it can interpret in various ways.
Posted by: Helen at January 19, 2004 7:01 PM
Posted by: julia at January 24, 2004 8:16 PM