History

The idea was invented when I was a suitemate with Brian Hare at the University of Idaho. He liked to do Action Script 3. He was writing a game that you were a space ship with a couple of gravitational bodies. I think the gravity went as 1/r instead of 1/r2. Your job was to destroy the other ship by any means you saw fit. Each ship had its own special weapon or ability. We thought it would be entertaining if we did something like it in a quantum environment. "Maybe you hit them and maybe you didn't." This is my start of that project.

Rules

I would like to get the physics engine as close to real physics as possible. But some rules need to be broken to make the game reasonable to play in some potential fields. For example, when I/we get around to the helium potential, to make it playable, the energy difference between n=1 and n=2 will have to be reduced because it is larger than the energy difference between n=2 and the free electron. When both electrons are in an n=2 state and one falls the radiation will remove the second electron and that can cause the game to be unplayable due to insufficient give in the physics.

You will be able to simultaneously measure any physical quantity like momentum and position of the opponent and yourself. You will also be able to determine how accurate make the measurement constrained by the uncertainty for the current wave-function. In multi-dimensional potentials, you will be able to independently and simultaneously measure position and momentum in orthogonal directions.

Your health and ability to fire on the opponent should be determined by a quantum operator on the wave-function. Higher energy functions have more ability to fire but less health. If you take on too much energy, then you will be liberated from the system and you lose.

Energy will be conserved by any means possible. If you make a measurement and the resulting wave-function has less energy than it did before, whatever was body that was not measured acquired the difference. If it has more energy than before, then whatever was not measured lost the difference. From time to time, a photon will impart more energy on the two particles. The act of firing will move energy from one particle to the other. The energy of the particle may be distributed in a linear combination of the eigenfunctions for that potential.

Firing can be done in any direction. If you happen to be in a system where spherical coordinates makes sense (any 3-D potential), then you could fire in the direction -r+theta. I would write that direction as "-\hat{r}+\hat\theta" in Latex. A probability of a hit will be determined by a method of integration. The amount of you that is behind the line of fire times the amount of the opponent that is in front of the line of fire. If all of you is on the right, and all of the opponent is on the left, and you fire to the left, then the hit guaranteed. But there will also be a probability of hitting yourself. It will make firing in the direction of the center ill advised as there is a probability to hit yourself as instead and nothing happened. There will also be a probability of hitting nothing and sending then energy off into space. That should be equal to the complement of the hitting either you or opponent. The probabilities of hitting yourself and the opponent will be divided by two to normalize and a three-way Bernoulli random variable will be set up and an outcome determined. I'm debating with myself if I should do probability of hit, or proportion of shot imparted. Either way, the integration must still be done.

It will also be possible to change your complex phase. It would be like an electron traveled past the outside of a solenoid, see Aharonov-Bohm Effect or for an experimental confirmation. By changing the phase, it will possible to avoid being hit but it will also prevent you from hitting the other particle. If at the time the shot was fired and the two particles are 90° out of phase, the shot would then be guaranteed to missed. While a 45° or 135° phase change would reduce the probability of a hit or the proportion of the energy imparted by a factor of 2.

Physics Engine

I think using the infinite square well as a proof of concept and getting the main machinery of the program working. The following link is to my analytical handy work so far. The some of the useful infinite square well results are at the bottom.

Design

My preferred programming language is C++. It has useful built in features. It looks like the built in features can get in the way of good update.

Each potential will have solutions defined in a dynamically loaded library. Help on dynamically loaded libraries is avalible at Program Library HOWTO, C++ dlopen mini HOWTO, and U Idaho, CS 121, Library Lab. It will contain the energy per eigen-function, Ψn, |Ψn|2, Ψn*Ψmm*Ψn, Φn, |Φn|2, Φn*Φmm*Φn and their definite intergrals for the real valued functions with a lower bound of the lower domain of the integrand. Intergrals may be defined by either numerical or analytical solutions. Standard numerical methods like integrals and zero finding will be included in a second header. Φ is similar to the complex Fourier Transform of Ψ. Properly stated Φ is the wave-function in momentum space.

A text to function parser will be included as a header. I have in mind that a user will be able to specify a function by using coefficents or by giving an intial condition. The parser will parse the user's text function. I think the text to function parser will be a stack, queue, stack of queues, or queue of queues of function pointers with an optimizer. If you know how to write or where to find a good interperter, now would be a good time to say something. It will be faster than reparsing the functions every time the function is called for.

Infinite Square Well Potential header

Help

If you should like to provide assistance in the project, please let me know. E-mail Please use an intelligent subject line, I'm good at ignoring junk. I will need people who can do AI, graphics (2- and 3-D), Internet communications to play the game on a server or to do multi-player, GUI, optimization, and parallelization. I think the best way to optimize, aside by using approximations, is to use analytical solutions to the equations whenever possible.

This project will be released under GPLv3.